bind и this || JavaScript
Имеется следующий код:
function greet() {
console.log('Greet', this);
}
let person = {
name: "John",
sayHi: greet,
sayHiWindow: greet.bind(this)
}
person.sayHiWindow()
Возник вопрос: почему при вызове person.sayHiWindow() в консоли выдаёт объект window, а не person?
Ответы (2 шт):
Автор решения: Igor
→ Ссылка
Потому что в этом месте
sayHiWindow: greet.bind(this)
this - это window, а person еще не существует..
Автор решения: vsemozhebuty
→ Ссылка
Тут стоит помнить, что this равняется субъекту вызова метода, если упоминается внутри метода, в теле функции, в её области видимости. Когда вы определяете sayHiWindow: greet.bind(this), вы присваиваете ключу sayHiWindow значение, возвращаемое функцией greet.bind(this), и здесь this вы используете вне тела метода, как аргумент вызова функции, и вы находитесь в глобальной области видимости, где this равно window.
То, чего вы пытаетесь добиться, можно реализовать так:
sayHiPerson : function() { greet.bind(this)(); },