[英]Javascript. What is the difference between closures and dynamic 'this' binding practically speaking?
我認為使用閉包可以實現的內容與使用Javascript構造函數可以實現的內容之間存在大量重疊-盡管不同的結構在API中存在一些細微差異。
這段代碼:
function Animal1(name) {
this.name = name;
};
var x = new Animal1('x');
console.log(x.name); // x
在功能上似乎與此代碼非常相似:
function Animal2(name) {
var name = name;
var getName = function() {return name;};
return {name: getName};
}
var y = Animal2('y');
console.log(y.name()); // y
除了x被分配了__proto__
屬性。 如果您不打算在代碼中使用原型繼承,那么如何在閉包和上面的構造函數之間進行選擇?
即哪個需要更多的內存? 哪個更有效? 還有其他事情要考慮嗎? 等等等
function Animal2(name) {
var name = name;
var getName = function() {return name;};
return {name: getName};
}
var y = Animal2('y');
console.log(y.name()); // y
在前面的代碼中,每次調用Animal2時都會生成getName函數。 在這種情況下,這當然是微不足道的,但是此方法既需要更多的內存,又比較慢。 此方法的優點是,由於可以在不公開的函數之間共享私有變量,因此可以實現一定程度的封裝。
請查看以下內容以了解更多信息: https : //developers.google.com/speed/articles/optimizing-javascript
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.