@yourisus

Есть ли на собеседовании вопросы про контекст this?

Друзья, есть ли вопросы на собеседовании о том, что this зависит от контекста вызова?
Сохранилось ли эта особенность в классах и вообще ситуация в ES6?
Если можете посоветуйте задачки на контекст, чтобы потренировать, ну или лайфхак, который поможет изи запомнить это.
  • Вопрос задан
  • 214 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Друзья, есть ли вопросы на собеседовании о том, что this зависит от контекста вызова?
Вполне могут быть, так как это одна из базовых концепций языка
Сохранилось ли эта особенность в классах и вообще ситуация в ES6?
классы es2015 - всего лишь синтаксический сахар над прототипапами - более привычный синтаксис для пришедших из языков с классическим ООП, таких как java и C#
соответственно ситуация абсолютно такая же, как и с обычными функциями, единственное дополнение нового синтаксиса - нельзя вызывать конструктор без оператора new
Если можете посоветуйте задачки на контекст, чтобы потренировать, ну или лайфхак, который поможет изи запомнить это.
Надеюсь сойдет за лайфхак:
func()вызов с контекстом по-умолчанию (undefined в strict режиме или глобальный объект не в strict режиме)
func.call(ctx, ...args)
func.apply(ctx, args)
obj.func.call(ctx, ...args)
obj.func.apply(ctx, args)
вызов с указанным контекстом ctx

obj.func()вызов с контекстом obj
(0, obj.func)()хак "отвязка контекста", функция вызывается с контекстом по-умолчанию
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Aves
В общем случае, без учёта eval и with:
если слева от скобок вызова функции находится значение типа Reference, то значением this при вызове функции устанавливается Reference.base;
в других случаях, или если значением Reference.base является EnvironmentRecord, значением this устанавливается undefined.
Не в строгом режиме undefined заменяется на глобальный объект.

dmitrysoshnikov.com/ecmascript/ru-chapter-3-this
www.ecma-international.org/ecma-262/7.0/#sec-funct...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы