我有一个关于公共变量和闭包的问题。 在下面的代码中,为什么'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());
答案 0 :(得分:0)
temp
不是实例化对象的属性 - 它是实例化对象本身。当构造函数返回一个对象时,该对象正是分配调用构造函数的结果。也就是说,当你做
var pizzaA = new Pizza();
和披萨已经
return temp;
然后将temp
对象分配给pizzaA
。由于temp
对象具有属性getToppings
,因此您可以直接在getToppings
上调用temp
,也可以直接在pizzaA
上调用它,因为它们都是在内存中引用相同的对象。
答案 1 :(得分:0)
关键点:
this
关键字表现为Class 你可以做任何一次
var Pizza = function () {
this.crust = 'thin';
this.toppings = 3;
this.getToppings = function () {
return this.toppings;
};
};
var pizza = new Pizza();
console.log(pizza.getToppings()); //prints 3
OR(更通用的方式)
var Pizza = function (options) {
var crust = options.crust;
var toppings = options.toppings;
this.getToppings = function () {
return toppings;
};
this.getCrust = function () {
return crust;
};
};
var pizza = new Pizza({ crust: 'thin', toppings: 3 });
console.log(pizza.getToppings()); //prints 3
console.log(pizza.getCrust()); //prints thin