Re: закрытие Javascript.Как переменная внутри материнского объекта становится такой же, как материнский объект? - PullRequest
0 голосов
/ 10 мая 2018

У меня есть вопрос о публичной переменной и закрытии.В следующем коде, почему переменная 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 голосов
/ 10 мая 2018

Ключевые моменты:

  1. Функция Javascript ведет себя как ключевое слово Class
  2. this в функции ведет себя как экземпляр класса

Вы можете сделать либо

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

ИЛИ (более общий способ)

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
0 голосов
/ 10 мая 2018

temp - это не свойство экземпляра объекта - это сам экземпляр объекта. Когда конструктор возвращает объект, этот объект является именно тем, к чему присваивается результат вызова конструктора. То есть, когда вы делаете

var pizzaA = new Pizza();

и Пицца имеет

return temp;

тогда объект temp получает присвоение pizzaA. Поскольку у объекта temp есть свойство getToppings, вы можете вызвать getToppings непосредственно для temp, и вы также можете вызвать его напрямую для pizzaA, поскольку они оба ссылаются на один и тот же объект в памяти.

...