В этой статье мы начнем исследовать это. Ну подождите, вы можете быть удивлены, «это? что это?» и это именно то, что эта статья поможет вам понять.

Когда мы говорим слово «это» в повседневной жизни, мы имеем в виду что-то в конкретном контексте. Если я нахожусь в магазине Apple, а продавец и я обсуждаем MacBook, в покупке которого я заинтересован, MacBook становится нашей темой для разговора и создает для нас некоторый контекст. Теперь я могу спросить: «Подходит ли это для просмотра повторов «Офиса»?», и мы будем использовать слово «это» при взаимном понимании того, что это относится к этому MacBook.

Круто, мы в детском саду этому научились. Итак, почему то, что мы выучили в детском саду, является проклятием существования стольких Javascript-разработчиков!? Ну, это не так, но в мире компьютерного программирования это довольно деликатная концепция, и освоить ее не так просто. Однако, как и большинство вещей, это происходит наиболее естественно как с практикой, так и с выдержкой. Итак, давайте разберемся, что это такое, а затем начнем немного веселиться с this в вашем коде!

В Javascript this — это зарезервированное слово, которое ссылается на объект в его текущем контексте выполнения. Какие? Давайте подумаем об этом проще: This — это ключевое слово, которое относится к объекту. Мы используем это ключевое слово для ссылки на объект, выполняющий текущую функцию.

Если функция является свойством объекта, мы называем эту функцию методом. Здесь, поскольку функция является методом (объекта), этоссылается на сам объект.
Теперь, если функция является просто стандартной функцией в вашем коде, это > будет ссылаться на глобальный контекст выполнения, которым в большинстве случаев будет окно вашего браузера. У этого нет конкретного объекта для ссылки, поэтому он относится к самому внешнему контексту вашего кода.

Здесь мы создаем объект автомобиля со свойством марки и методом вождения. Метод привода просто записывает в консоль этот ссылочный объект. Итак, если мы вызовем функцию: car.drive(); мы увидим объект автомобиля с именем «bmw» в консоли. Опять же, метод вызывается на машине. автомобиль является объектом ссылки, поэтому он становится этим. Если мы добавим дополнительные методы к объекту, car, любое использование this будет ссылаться на этот объектcar.

Давайте теперь сравним с новой функцией в глобальном контексте выполнения. Я определил новую функцию в глобальной области видимости, driveCar. Просто это запишет в консоль все, на что ссылается this. Как и ожидалось, при вызове указанный объект является окном. Если это не сходится, представьте, что любая функция в глобальной области видимости выглядит так: window.driveCar(); Как вы думаете, к чему относится это?

Конечно, это лишь верхушка айсберга, как вы понимаете, это может стать очень странным. Особенно, когда мы начинаем иметь дело с функциями обратного вызова внутри методов. В некоторых из этих случаев Javascript действительно помогает вам, например, при вызове forEach. Когда мы вызываем метод forEach, мы используем функцию обратного вызова, которая, как мы теперь знаем, будет ссылаться на глобальное выполнение, но forEach на самом деле допускает дополнительный аргумент, в котором ссылка на this может быть привязана к .

По сути, понимание этого просто сводится к признанию текущего контекста выполнения в игре. Функция сама по себе будет ссылаться на окно, а метод будет ссылаться на объект, для которого он вызывается. Ты получил это!