że mam konstruktora obiektu oraz sposobu prototypu, jak:Czy mogę powiązać metody prototypowe konstruktora ze skonstruowanymi instancjami, zachowując oddzielne problemy?
function Human(name) {
this.name = name;
}
Human.prototype.sayName = function(){
console.log('my name' + this.name);
};
gdzie indziej w moim kodu, mam zdefiniowane wystąpienie Człowieka:
let jeff = new Human('jeff');
i wreszcie chcę przekazać jeff.sayName
jako zwrotną innej funkcji, takich jak (na przykład szczególnie trywialne)
function callFunction(callback) {
callback();
}
callFunction(jeff.sayName);
Przywodząc callFunction(jeff.sayName)
powyżej, kontekst musi być związany z jeff
sam, jak callFunction(jeff.sayName.bind(jeff))
. Ale to jest niezgrabne i wolałbym nie martwić się o tego rodzaju logikę za każdym razem, gdy używam tej metody jako wywołania zwrotnego.
Alternatywą byłoby zastąpienie Human.prototype.sayName
z czymś jak
Human.prototype.createSayName = function(context){
return function() {
console.log(context.name);
};
};
a następnie zdefiniować funkcję z
ale jest to trochę niewygodne, i chciałbym zachować jeff
agnostyk do metod, które dziedziczy po Human.prototype
.
Więc idealnie chciałbym obsługiwać tę logikę na samej Human.prototype, coś
Human.prototype.sayName.bind(WhateverObjectHoldsThisMethod)
ale nie jestem świadomy JavaScript sposób to robi.
TL; DR Chciałbym sposób wiązania prototypowej metody obiektu do dowolnego obiektu, który go dziedziczy, bez konieczności wykonywania tego za każdym razem, gdy przekazuję tę metodę jako argument lub za każdym razem, gdy definiuję nowy obiekt. Przepraszam, jeśli to nie ma sensu. Dzięki!
Czekaj, co? Nie rozumiem pytania ... 'jeff.sayName()' działa na własną rękę, nie? – Li357
Pierdnięcie mózgu. Pozwól mi edytować mój przykład ... –
"* ... kontekst musi być związany z' jeff' * ". Wartość * this * jest związana z * jeff * przez wywołanie: 'jeff.sayName()'. Masz na myśli, że chcesz wywołać metodę na jakimś nieludzkim obiekcie * jim *? – RobG