Скажем, у меня есть конструктор объекта и метод прототипа, например:
function Human(name) {
this.name = name;
}
Human.prototype.sayName = function(){
console.log('my name' + this.name);
};
В другом месте моего кода я определил экземпляр человека:
let jeff = new Human('jeff');
и, наконец, я хочу передать jeff.sayName
как обратный вызов какой-либо другой функции, например (для особо тривиального примера)
function callFunction(callback) {
callback();
}
callFunction(jeff.sayName);
Когда я вызываю callFunction(jeff.sayName)
выше, контекст должен быть привязан к jeff
сам, например
callFunction(jeff.sayName.bind(jeff))
. Но это неудобно, и я бы не стал беспокоиться об этой логике каждый раз, когда я использую этот метод в качестве обратного вызова.
Альтернативой было бы заменить Human.prototype.sayName
чем-то вроде
Human.prototype.createSayName = function(context){
return function() {
console.log(context.name);
};
};
а затем определите функцию с
jeff.sayName = jeff.createSayName(jeff)
но это немного неудобно, и я хотел бы сохранить агностик jeff
для методов, которые он наследует от Human.prototype
.
В идеале я бы хотел обработать эту логику самого Human.prototype, что-то вроде
Human.prototype.sayName.bind(WhateverObjectHoldsThisMethod)
но я не знаю, что у javascript есть способ сделать это.
TL; DR Мне нужен способ привязки метода прототипа объекта к любому наследуемому ему объекту, без необходимости делать это каждый раз, когда я передаю этот метод в качестве аргумента или каждый раз, когда я определяю новый объект. Извините, если это мало смысла. Спасибо!