Re:Javascript关闭。母对象内部的变量如何与母对象相同?

时间:2018-05-10 03:56:05

标签: javascript scope closures

我有一个关于公共变量和闭包的问题。   在下面的代码中,为什么'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());

2 个答案:

答案 0 :(得分:0)

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

var pizzaA = new Pizza();

和披萨已经

return temp;

然后将temp对象分配给pizzaA。由于temp对象具有属性getToppings,因此您可以直接在getToppings上调用temp,也可以直接在pizzaA上调用它,因为它们都是在内存中引用相同的对象。

答案 1 :(得分:0)

关键点:

  1. Javascript函数本身就是一个类
  2. 函数中的
  3. this关键字表现为Class
  4. 的实例

    你可以做任何一次

    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