2016-05-13 11 views
0

私はクロージャで達成できるものと、Javascriptでコンストラクタで達成できるものとの間に重大なオーバーラップがあると考えていますが、それにもかかわらずAPIでは若干の違いがあります。Javascript。クロージャと動的な 'this'バインディングとの違いは何ですか?

このコード:

function Animal1(name) { 
    this.name = name; 
}; 
var x = new Animal1('x'); 
console.log(x.name); // x 

は、機能的に、このコードと非常によく似ているようだ:

​​

そのXを除いては、__proto__プロパティが割り当てられます。あなたのコードでプロトタイプの継承を使用しない場合は、上記のようなクロージャとコンストラクタの間でどのように選択しますか?

つまり、より多くのメモリが必要ですか?それはより効率的ですか?考慮すべき他のものはありますか?

答えて

1
​​

上記のコードでは、getName関数は、Animal2が呼び出されるたびに生成されます。この場合はもちろん、それは自明ですが、この方法はより多くのメモリを必要とし、遅くなります。このメソッドの利点は、公開されていない関数間でプライベート変数を共有できるため、ある程度のカプセル化が可能になることです。メモリに関しては https://developers.google.com/speed/articles/optimizing-javascript

+0

- 現代のJSエンジンが作成した各オブジェクトの機能と同様の「コピー」を使用する場合、私は全然驚かない:

は、詳細については、以下を見てみましょう。 –

+1

@JamesThorpeあなたはその証拠や情報源がありますか?今はちょうど投機のように聞こえる、彼らがそれをしたかどうかを見て非常に興味深いでしょう。 –

+1

https://developers.google.com/speed/articles/optimizing-javascript – sheeldotme

関連する問題