Как IIFE влияет на это ключевое слово внутри него при назначении в качестве свойств объекта - PullRequest
0 голосов
/ 13 мая 2018
var a={
   name:"Rhona",
   check:(function(){
          return this.name;
            })();
   }
 console.log(a.check)// This returns ""

Пустая строка Я ожидал, что она возвратит Рону, она не дала неопределенного или нулевого значения, а пустую строку, что здесь происходит?

И я также хочу знать, почему, когда я получаю доступ кСвойство объектов, которого там нет, дает неопределенное, вместо того, чтобы давать не определенное. Я распознаю неопределенное - это значение, данное переменным на этапе создания, фаза выполнения затем инициализирует значение, поэтому при отсутствии инициализации оно остается неопределенным, поэтому при доступе к свойству объектадопустим, что a.lastname, которого нет, не должно возвращать java-скрипт не определенным, почему вместо этого он дает undefined?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Вы можете использовать getter для реализации того, что вы хотите:

var a={
   name:"Rhona",
   get check(){
          return this.name;
            }
   }
0 голосов
/ 13 мая 2018

IIFE выполняется немедленно (это первое «Я» ¹). Поскольку вы вызываете его, не делая ничего особенного для установки this, this по умолчанию - глобальный объект (в свободном режиме) или undefined (в строгом режиме). (См. Как работает ключевое слово "this"? )

Вы в основном делаете это, но без временной переменной:

var temp = (function() {
    return this.name;
})();
var a = {
    name: "Rhona",
    check: temp
}
console.log(a.check) // This returns ""

Причина, по которой вы получаете "" вместо undefined, заключается в том, что вы используете свободный режим, и поэтому this относится к глобальному объекту, который является окном в браузерах, и окно имеет name свойство (имя текущего окна), которое обычно пустое ("").


¹ Первое «Я» в «IIFE» - это «Встроенный» или «Немедленно» в зависимости от того, кого вы спрашиваете. :-) Например, "Выражение встроенной функции" или "Выражение немедленной функции".

...