我认为使用闭包可以实现的内容与使用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__
属性。如果您不想在代码中使用原型继承,那么如何在闭包和构造函数之间进行选择?
即。需要更多记忆?哪个更有效率?还有其他需要考虑的事情吗?等等。
答案 0 :(得分:1)
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