2009-07-26 12 views
1

Angenommen, ich habe ein Objekt namens FieldEdit. Ich definiere den Funktionskonstruktor für dieses Objekt, instanziiere es über. var obj = new FieldEdit(), und definieren Sie seine Methoden von FieldEdit.prototype.<method name> = function() { ... }.Javascript-Frage: Problem mit dem Aufrufen eines Objekts Methoden

Unter welchen Umständen würde der Aufruf der Methoden dieses Objekts innerhalb der anderen Methoden der Objekte (via. this.<method name>();) fehlschlagen?

Beachten Sie, dass ich vermeiden möchte, ein Codebeispiel dafür zu posten, wenn ich kann, da ich denke, das ist einfach ein Problem mit meinem Verständnis von Javascript mehr als alles, wirklich. Ich bin mir ziemlich sicher, dass mein Code nach meinem besten Wissen solide ist (und es ist mein Wissen, das ist hier die Frage).

Antwort

2

Das wahrscheinlichste Szenario, wo this ein anderes Objekt als FieldEdit während der Ausführung von Methoden FieldEdit verweisen würde, ist in einem verschachtelten Rahmen wie ein Verschluß, ein Event-Handler, oder jede Funktion oder eine Methode oder explizit mit .call(someOtherScope).apply(someOtherScope, args) genannt.

Sie können das natürlich umgehen, indem Sie einen variablen Verweis auf die FieldEdit Instanz beibehalten und statt dessen FieldEditInstance.<method>() verwenden.

PrototypeJS können Sie Funktionen mit Function.bind für diesen Zweck wickeln, aber es sonst leicht zu bewerkstelligen ist, entweder mit:

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

ODER

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. Tatsächlich passiert es in einer Callback-Funktion für einen benutzerdefinierten Event-Handler, den ich gebaut habe. Was für ein Schmerz. –

Verwandte Themen