SOFT
SPRINT

softsprint.net Shop

Что такое 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 является более простым!

CONTACT US
Cookies | Privacy Policy | Terms and ConditionsSoftSprint ©