La méthode de liaison de Javascript ne fonctionne pas comme prévu
var obj = {
say: function() {
function _say() {
console.log(this);
}
return _say.bind(obj);
}()
};
obj.say();
le résultat de code est log le global ou la fenêtre, je veux savoir pourquoi la méthode de liaison ne lie pas « ceci » au contexte d'objet obj?
La vraie question ici est de savoir si vous avez besoin de cette liaison, pourquoi n'utilisez-vous pas un objet-avec-prototype? Le code que vous montrez essaie de passer de la "logique d'instance" au code "instance-of-nothing", ce que vous pouvez * faire *, c'est JavaScript, mais c'est aussi vraiment ... idiot? Qu'est-ce que vous * essayez * de faire avec ce code? (ou avec un code comme celui-ci) –
(1) Placez un point d'arrêt sur la ligne 'return _say.bind (obj); (2) Quand il s'arrête là, examinez la valeur de 'obj'. (3) Pensez vraiment dur. (4) Expliquez à votre [canard en caoutchouc] (https://en.wikipedia.org/wiki/Rubber_duck_debugging) exactement pourquoi vous essayez d'assigner le résultat d'un IIFE à la propriété 'say'. –
Merci pour vos commentaires, @Mike 'Pomax' Kamermans. Ce code est une pratique juste, je veux savoir pourquoi 'this' est global quand on utilise bind (undefined). – smallbone