的JavaScript。关闭和动态之间有什么区别'这个'实际上绑定?

时间:2016-05-13 07:43:52

标签: javascript

我认为使用闭包可以实现的内容与使用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__属性。如果您不想在代码中使用原型继承,那么如何在闭包和构造函数之间进行选择?

即。需要更多记忆?哪个更有效率?还有其他需要考虑的事情吗?等等。

1 个答案:

答案 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