Автор оригинала: Emile Cantin.
Первоначально опубликовано на мой блог
Это это
реальная жизнь?
Это это
просто фантазия?
– Фредди Меркурий, пытаясь изучить JavaScript
Одно правило, чтобы знать, в том, что это
это всегда Что бы ни было до точки ( .
) Когда вы Позвоните функция.
E.G: Dog.bark ()
Отказ Внутри кора ()
Функция, это
будет объектом собака
потому что это то, что перед точкой.
Вот и все.
Давайте рассмотрим это более подробно.
Глобальный контекст исполнения, А.К.А. В любом месте за пределами функции все еще пребывается этим правилом. Это делает это в обручке, но очевидно, как вы думаете об этом: dosomething ()
это точно так же как window.dosomething ()
Отказ Так что же до точки? окно
, конечно!
Примечание: это глобальный
вместо окно
в ноде.
Теперь давайте рассмотрим фактические исключения из правила.
привязывать
Основная цель – «установить» это
постоянно. Так что исключение довольно очевидно, и я оставлю это в этом. Применить
и Позвоните
Оба взять аргумент «thasarg», который будет явно настроен это
для тебя. Опять довольно очевидное исключение.
Функции со стрелками ( () => {}
) Это новая концепция в ES6. Это было несколько лет, поэтому вы, вероятно, должны знать о них, но одним из их основных свойств является то, что они автоматически связаны с это
когда они объявлены. Другими словами, это так, как будто вы сделали:
function myFunction() { // ... } myFunction = myFunction.bind(this);
Опять же, это одна из главных причин, по которым вы будете использовать функции стрелки, поэтому не совсем удивительно.
Это немного менее очевидно. Помните, когда я сказал это dosomething ()
и window.dosomething ()
были то же самое? Ну, в строгом режиме, который больше не совсем так. Ведь строгий режим предполагается зафиксировать несколько странных частей JavaScript, и этот особый случай на самом деле делает немного больше смысла в строгом режиме:
dosomething ()
Нет ничего перед точкой, поэтому это
это undefined
Отказ window.dosomething ()
все еще есть это
установить окно
Отказ
Это наименее удивительное исключение для практикующих более традиционного объектно-ориентированного языка: это
Внутри конструктора (функция, вызываемая с New
), является созданием объекта.
Обработчики событий имеют особое упоминание в Документация MDN И в большинстве объяснений я видел онлайн, но им это не нужно, потому что они все еще следуют тому же основным правилам. Когда вы нажимаете на свою веб-страницу, это произойдет где-то глубоко внутри вашего браузера:
const element = getTheElementYouClickedOn(); element.onclick(); // <-- This is how your function actually gets called
Так какова ценность это
Внутри вашего обработчика событий? Вы догадались, это элемент
Отказ
Итак, просто вспоминая это простое правило ( это
это всегда Что произойдет перед точкой, когда вы называете функцию) и 4 исключения, вы, наконец, сможете сказать, что вы «получили это
“.