Что такое this в JavaScript

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

Итак, что же может значить this?

Если ключевое слово используется вне объекта, оно указывает на глобальный объект. В браузере это объект window — самый главный объект, включающий в себя document, location, history и некоторые другие полезные свойства и методы.

alert(window === this); // true

Внутри функции this также указывает на глобальный объект window:

function TestThis() {
	alert(window === this); // true
}
TestThis();

Когда мы вызываем конструктор объекта, или же один из его методов, this уже указывает на текущий объект:

window.WhoAmI = "window";
function Test() {
	this.WhoAmI = "Test";
	this.Check1 = function() {
		alert(this.WhoAmI); //Test
	};
}
Test.prototype.Check2 = function() {
	alert(this.WhoAmI); // Test 
};
var t = new Test();
t.Check1();
t.Check2();

При использовании методов call() и apply() this будет указывать на объект, который передается в параметрах этих методов. Вот пример:

function SetType(type) {
	this.WhoAmI = "I'm the "+type+" object";
}
var newObject = {};
SetType.call(newObject, "newObject");
alert(newObject.WhoAmI); // I'm the newObject object
var new2 = {};
SetType.apply(new2, ["new2"]);
alert(new2.WhoAmI); // I'm the new2 object

Вот и все на что может указывать в той или иной ситуации this в JavaScript. Теперь, думаю, проблем с ним не должно возникнуть.

Запись опубликована в рубрике JS & jQuery с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">