Проблема в примере 1 - это 'this', ссылающаяся на глобальное имя вместо объекта myName.
Я понимаю использование bind() при установке значения этого для конкретного объекта, поэтому он решает проблему в примере 1, но почему эта проблема возникает в первую очередь? Это просто способ создания Javascript?
Мне также интересно, почему пример 3 решает проблему и разницу между примерами 2 и 3.
this.name = "John"
var myName = {
name: "Tom",
getName: function() {
return this.name
}
}
var storeMyName = myName.getName; // example 1
var storeMyName2 = myName.getName.bind(myName); // example 2
var storeMyName3 = myName.getName(); // example 3
console.log("example 1: " + storeMyName()); // doesn't work
console.log("example 2: " + storeMyName2()); // works
console.log("example 3: " + storeMyName3); // works