2011-07-02 4 views
2

Javascriptでプロトタイプとクロージャーパターンをちょっと見てきました。ご存知のように、オブジェクトのすべてのインスタンスに対して同じ関数を再定義するため、クロージャーパターンを使用するとperformance penaltyがあります。しかし、閉包パターンはプライベート変数を許可しているため、カプセル化が容易になります。私が考えていたクロージャーでプロトタイプパターンを使用する

function Foo(val) { 
    this.val = val; 
} 

Foo.prototype.getVal = function() { 
    return this.val; 
} 

var f = new Foo(42); 

、なぜあなたはこのような何かを行うことはできません。

ここPrototypeパターンの典型的な例ですか?

function Parent() { 

} 

Parent.prototype.getVal = function() { 
    return this.val; 
} 

function foo(val) { 
    function Obj { 
     this.val = val; 
    } 

    Obj.prototype = new Parent(); 

    return new Obj(); 
} 

var f = foo(42); // Note the missing 'new' 

これはfoo()関数のprivate変数を許可し、foo()関数でプロトタイプを動的に設定することさえできます。

私はjsperf.com testを作成しましたが、パフォーマンスに大きな違いがありますが、その理由はわかりません。

答えて

2

パフォーマンスの違いは、1つではなく2つのオブジェクトを作成している可能性が高いからです。もう一方のプロトタイプとして使用するために、1つの余分なオブジェクトを作成しています。

このように多くのオブジェクトを作成したい場合は、1つのプロトタイプオブジェクトを作成し、作成したすべてのオブジェクトのプロトタイプとして使用するだけです。

関連する問題