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を作成しましたが、パフォーマンスに大きな違いがありますが、その理由はわかりません。