3

私がJavaScriptクラスを書くとき、それは通常次のようになります:

var myClass = function(prop1, prop2) {
    this.prop1 = prop1;
    this.prop2 = prop2;

    this.method1 = function() {//blah}
    this.method2 = function() {//blahblah}
}

しかし、私が読んだほとんどの本/チュートリアルでは、クラスの作成について次のように説明しています。

var myClass = function(prop1, prop2) {
    this.prop1 = prop1;
    this.prop2 = prop2;
}
myClass.prototype.method1 = function() {//blah}
myClass.prototype.method2 = function() {//blahblah}

これら2つのアプローチの違いは何ですか? 一方が他方より優れているか?

4

2 に答える 2

0

プロトタイプを使用する 2 番目の方法は、多数のオブジェクトを作成する場合、特に多数のメソッドがある場合にはるかに効率的です。

最初のアプローチでは、 を呼び出すたびにすべてのメソッド関数を作成する必要がありますnew myClass()。プロトタイプを使用する場合、これらの関数は 1 回だけ作成する必要があります。

最初のアプローチには 1 つの利点があります。コンストラクター関数をクロージャーとして使用できるため、そのメソッドはコンストラクター内のローカル変数にアクセスできます。

補足として、コンストラクター関数名は、通常の JavaScript 規則に従うために大文字で始める必要があります。

于 2013-03-08T20:44:42.810 に答える
0

実装したのは単なる関数です。これらは、オブジェクトを作成するためのコンストラクターとして使用できます。コンストラクターが呼び出されると、新しいオブジェクトが作成Prototypeされ、コンストラクターのプロトタイプ プロパティが設定されます。つまり、コンストラクターのプロトタイプとプロパティを共有します。最初のケースmethod1method2は、コンストラクターを使用して作成された各オブジェクトのプロパティですmyClass。これらのメソッドが、その方法で作成されたすべてのオブジェクトで同じである場合、それは一種のメモリ浪費です。これらのメソッドをコンストラクターのプロトタイプに入れると、コンストラクターが呼び出されたときにそれらの新しいコピーは作成されませんが、作成されたオブジェクトは引き続きプロトタイプ チェーンを使用してそれらにアクセスできます。したがって、一般的にはメモリを節約するためです。

于 2013-03-08T20:45:45.413 に答える