Рубрики
Без рубрики

`Это в JavaScript: наконец, объяснение, которое имеет смысл

Первоначально опубликовано в моем блоге (https://blog.emilecantin.com/web/javascript/2019/12/16/this-javascript.html) Это реальная жизнь? Это просто фантазия? – Фредди Меркурий, пытаясь учиться …

Автор оригинала: 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 исключения, вы, наконец, сможете сказать, что вы «получили это “.