2009-07-26 6 views
1

Dites que j'ai un objet appelé FieldEdit. Je définis le constructeur de la fonction pour cet objet, instancier le via. var obj = new FieldEdit(), et définir ses méthodes par FieldEdit.prototype.<method name> = function() { ... }.Question Javascript: Problème avec l'appel d'une méthode d'objets

Dans quelles situations l'appel des méthodes de cet objet dans les autres méthodes des objets (via this.<method name>();) échoue-t-il?

Notez que je veux éviter de poster un exemple de code pour cela si je peux car je pense que c'est simplement un problème avec ma compréhension de Javascript plus que tout, vraiment. Je suis certain que mon code est solide, au meilleur de ma connaissance (et c'est ma connaissance c'est la question ici, d'ailleurs).

Répondre

2

Le scénario le plus probable où this pourrait faire référence à un objet autre que FieldEdit pendant l'exécution de méthodes FieldEdit est dans une portée imbriquée comme une fermeture, un gestionnaire d'événements, ou une fonction ou méthode appelée explicitement .call(someOtherScope) ou .apply(someOtherScope, args).

Vous pouvez contourner cela, bien sûr, en conservant une référence variable à l'instance FieldEdit et en utilisant FieldEditInstance.<method>() à la place.

prototypejs vous permet de enveloppez fonctions avec Function.bind à cet effet, mais il est facilement accompli autrement, que ce soit avec:

var FieldEditInstance = this; 
obj.methodThatUsesACallback(function() { 
    // use that instead of this 
}); 

OU

var FieldEditInstance = this; 
var callback = function() { 
    // ... 
}; 
// This is more or less what PrototypeJS' Function.bind produces 
var boundCallback = function() { 
    return callback.apply(FieldEditInstance, arguments); 
}; 
obj.methodThatUsesACallback(boundCallback); 
+0

Ah. En effet, il se passe dans une fonction de rappel pour un gestionnaire d'événements personnalisé que j'ai construit. Quelle douleur. –