Что такое this в JavaScript?
Что такое this в JavaScript? Постараемся ответить своими словами:
– this – это ссылка на текущий объект, в котором этот самый this и упоминается;
– this – это ссылка на объект, указанные перед точкой свойства или метода;
– this – это ссылка на этот новый объект, созданный с помощью конструктора (класса).
Давайте рассмотрим пример конструктора, который создаёт новый объект, добавляя в него методы:
"use strict"
function Machine(power) {
this.power = power;
this.hi = function () {alert("result for THIS: " + this.power)}; // (1)
var self = this;
function priv() {alert ("result for SELF: " + self.power)}; // (2)
this.hello = function () {
priv()
};
};
var machine = new Machine(10);
machine.hi();
machine.hello();
Machine – это конструктор, который при вызове создаёт объект и записывает ссылку на него в переменную machine. В строке (1) метод hi выводит сообщение со значением свойства power.
Свойство power и метод hi имеют один и тот же this – ссылку на новый объект, который будет создан конструктором Machine.
Здесь всё понятно, поэтому смотрит на cтроку (2): в функции priv() вместо this.power мы указали self.power. Зачем?
Дело в том, что на момент инициализации функции priv() в строке (2) её значение this не определено (для режима “use strict”) либо равно window (без “use strict”), т.е также не определено! С этой целью мы умышленно создали переменную self и записали в неё ссылку на текущий объект, который создаст конструктор. Теперь всё ОК – функция priv() отобразит значение свойства power в нужном нам контексте.
Конечно, вместо self мы могли бы использовать методы call/apply/bind для строгой привязки контекста, например priv.call(this). Но описанное решение с self является более простым!