Значение this
в JavaScript определяется во время выполнения кода, когда функция вызывается. Значение this
зависит от контекста вызова функции, то есть от того, как именно была вызвана функция.
Значение this
может быть определено в следующих контекстах:
- В глобальной области видимости,
this
ссылается на объектWindow
в браузере или на объектglobal
в Node.js.
console.log(this === window); // true (in a browser)
- В методах объекта,
this
ссылается на сам объект.
const obj = {
name: "John",
greet: function() {
console.log(`Hello, my name is ${this.name}`);
}
};
obj.greet(); // "Hello, my name is John"
- В функциях, вызванных с помощью методов объекта,
this
ссылается на сам объект.
const obj = {
name: "John",
greet: function() {
console.log(`Hello, my name is ${this.name}`);
}
};
const myGreet = obj.greet;
myGreet(); // "Hello, my name is undefined"
- В конструкторах объектов,
this
ссылается на новый экземпляр объекта, который создается при вызове конструктора.
function Person(name) {
this.name = name;
this.greet = function() {
console.log(`Hello, my name is ${this.name}`);
}
}
const john = new Person("John");
john.greet(); // "Hello, my name is John"
- В функциях, вызванных с помощью методов
call()
,apply()
илиbind()
,this
ссылается на объект, переданный как первый аргумент.
const obj = {
name: "John",
greet: function() {
console.log(`Hello, my name is ${this.name}`);
}
};
const otherObj = {
name: "Jane"
};
obj.greet.call(otherObj); // "Hello, my name is Jane"