This и его контекст [дубликат]

126
25 ноября 2018, 18:20

На данный вопрос уже ответили:

  • Потеря контекста вызова 5 ответов

уважаемые пользователи. Хочу задать один вопрос, чтобы прояснить одну вещь, немного непонятную. Про то, куда указывает контекст

var object1 = {
    "attr1": function(){
        console.log(this);
        return 1+2;
    }(),
    "attr2": function(){
        console.log(this);
        return 1+2;
    },
    get "attr3"(){
        console.log(this);
        return 1+2;
    }
}
console.log(typeof object1.attr1);      //Тип Number, а This указывает на глобальный объект
console.log(typeof object1.attr2());    //Тип Function, а This указывает на объект object1
console.log(typeof object1.attr3);      //Тип Number, а This указывает на объект object1

Почему контекст attr1 указывает на глобальный объект? Прошу прощения за такой глупый вопрос, сам никак не соображу

Answer 1

Почему контекст attr1 указывает на глобальный объект? Прошу прощения за такой глупый вопрос, сам никак не соображу

"attr1": function(){
    console.log(this);
    return 1+2;
}(),

Здесь сразу выполняется функция. В данном случае, в св-во attr1 запишется именно значение, которое вернула функция ( получится 3 )
Функция же эта вызывается в глобальном контексте, так как объект еще не создан, идет только его инициализация

Если очень грубо упростить, то ваш код примерно равен вот этому коду:

var object1 = {};
object1.attr1 = function () {}();
object1.attr2 = function () {};
// и так далее

Вот тут главное отличие

// функция сначала вызовется, а только потом присвоится значение attr1
object1.attr1 = function () {}();
READ ALSO
Namespace в JavaScript

Namespace в JavaScript

При разборе мануала по использованию API от Яндекса столкнулся со следующей проблемойНепонятно откуда берется(или как/где подключается) объект...

145
Не вызывать отправку формы по нажатию на кнопку внутри нее

Не вызывать отправку формы по нажатию на кнопку внутри нее

Я создаю реакт компонент, содержащий в себе элементы, одним из которых является форма содержащая кнопкиТак как кнопки внутри формы, по-умолчанию,...

152
Выводить текущую дату по умолчанию на JS?

Выводить текущую дату по умолчанию на JS?

Нашел в сети готовый код на JS расчета предполагаемой даты родовС кодом все ОК, он прост и понятен

345