2016-05-13 54 views
0

我認爲在閉包中可以實現的功能和Javascript中的構造函數可以實現的功能之間存在重要的重疊 - 儘管API在不同結構上存在一些細微的差異。Javascript。實際上,閉包和動態「這種」綁定有什麼區別?

此代碼:

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

似乎在功能上非常相似,這樣的代碼:

​​

但X被分配一個__proto__屬性。如果你不打算在你的代碼中使用原型繼承,你將如何選擇閉包和構造函數,比如上面的代碼?

即哪個需要更多的內存?哪個更有效率?還有其他事情要考慮嗎?等等

回答

1
​​

在前面的代碼中,每次調用Animal2時都會生成getName函數。在這種情況下,這當然是微不足道的,但是這種方法需要更多的內存並且速度較慢。這種方法的好處在於它允許你進行一定程度的封裝,因爲你可以在不暴露的函數之間共享私有變量。

看看以瞭解更多信息如下: https://developers.google.com/speed/articles/optimizing-javascript

+0

關於記憶 - 我不會感到驚訝,如果現代JS引擎所使用的功能相同的「副本」爲創建的每個對象。 –

+1

@JamesThorpe你有任何證據或來源嗎?現在這聽起來就像猜測一樣,看看他們是否這樣做會非常有趣。 –

+1

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

相關問題