Значение 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"