Почему не работает последняя строка этого кода? Как я могу заставить его работать без изменения Thing или obj? Как назначить функцию с привязкой к контексту, вызывающую "obj.getName" переменной "f" (то есть выражение "f()" приведет к вызову "obj.getName").
class Thing{
constructor(name) {this._name = name;}
getName() { return this._name;}
}
const obj = new Thing('a');
const f = obj.getName;
const name = f();
Это просто объясняет, почему это не работает, решение уже находится в комментариях.
Почему последняя строка этого кода не работает
пусть сломает его, чтобы понять его более четко.
В этой строке
const f = obj.getName;
Вы копируете определение функции getName
и устанавливаете его в f
.
f
теперь является нормальной функцией, подобной любой, которую вы бы определили.
let f = function getName() {
return this._name;
}
Теперь, если бы вы это назвали, разве this
не было бы неопределенным?
const f = obj.getName.bind(obj);