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)(); },
→ Ссылка