softsprint menu Заказать

Что такое this в JavaScript?

Январь 18, 2017 в 1:44 | wiki

Что такое this в JavaScript? Постараемся ответить своими словами:
this — это ссылка на текущий объект, в котором этот самый this и упоминается;
this — это ссылка на объект, указанные перед точкой свойства или метода;
this — это ссылка на этот новый объект, созданный с помощью конструктора (класса).

Давайте рассмотрим пример конструктора, который создаёт новый объект, добавляя в него методы:

1
2
3
4
5
6
7
8
9
10
11
12
13
"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 является более простым!

Давайте обсудим

softsprint heart

Наши контакты

Львов, Украина
mob: +380 97 551 44 55
skype: softsprint.net

Скажите Привет!