首页 > 解决方案 > 回复:Javascript 关闭。母对象内部的变量如何与母对象相同?

问题描述

我有一个关于公共变量和闭包的问题。在下面的代码中,为什么母对象内部的“temp”变量可以像母对象一样使用?

例如,在以下代码中,如果您键入

console.log(pizzaA.getToppings());

你可以得到“3”

有点令人困惑,因为如果您返回“temp”,它仍然是母对象的属性。所以这意味着,我想我必须输入如下“console.log(pizzaA.temp.getToppings());”

不是吗?

var Pizza = function () {
    var crust = 'thin'; 
    var toppings = 3; 
    var getToppings = function () { return toppings; }; ​ 
    var temp = {};
    temp.getToppings = getToppings;
    ​return temp;
};

var pizzaA = new Pizza(); 
console.log(pizzaA.getToppings());

标签: javascriptscopeclosures

解决方案


temp不是实例对象的属性 - 它是实例化对象本身。当构造函数返回一个对象时,该对象正是调用构造函数的结果被分配给的对象。也就是说,当你这样做

var pizzaA = new Pizza();

比萨有

return temp;

然后temp对象被分配给pizzaA. 由于temp对象有属性getToppings,可以getToppings直接调用 on temp,也可以直接调用 on pizzaA,因为它们都引用了内存中的同一个对象。


推荐阅读