3

以下の 2 つの従業員クラスを作成しました。1 つはコンストラクター関数を使用し、もう 1 つは JSON 表記を使用します。コンストラクター関数では、print関数はプロトタイプによって作成されるため、コピーは 1 つだけ保持され、オブジェクト (emp1および) はこの関数emp2を共有します。print

質問: JSON 表記 ( EmployeeNew) では、print関数は 1 つのコピーとしてメモリに保持されますか? それとも、各オブジェクトは独自のコピーを保持しますか? これら2つのアプローチの根本的な違いは何ですか? どのシナリオに最適か?

var Employee = function (name) {
    this.name = name;
};

Employee.prototype.print = function () {
    console.log(this.name);
}


var emp1 = new Employee("jack"),
    emp2 = new Employee("mark");

emp1.print();
emp2.print();

var EmployeeNew = {
    init: function (name) { this.name = name; },
    print: function () {
        console.log(this.name);
    }
};

var empNew1 = Object.create(EmployeeNew),
    empNew2 = Object.create(EmployeeNew)

empNew1.init("jack")
empNew1.print();
empNew2.init("jack");
empNew2.print();
4

2 に答える 2

0

どちらの場合も同等です。新しいオブジェクトとそのすべての初期パラメータを使用して新しいオブジェクトを作成する場合、またはinitメソッドを使用する場合、コーディングスタイルにとってより直感的に見えるものを考える必要があります。

クラス実装の利点の1つは、クラス定義内でオブジェクトを作成する場合(プロトタイプのようなものではないことを知っています)、プロトタイプだけを使用して作成できない内部プライベート属性を作成できることです(アンダースコアプレフィックスのような特別な表記)。結局のところ、スタイルの問題であり、何をより快適に感じるかです。

于 2012-04-12T17:53:46.110 に答える