2009-05-14 5 views
0

Ich habe Code wie dieseszum Objekt Container innerhalb Ereignisfunktionen verweis

var MyObj = { 

    f1 : function(o){ o.onmousedown = MyObj.f2;}, 
    f2 : function(){ MyObj.f1(); } 
} 

Ich möchte wissen, wie man MyObj verweisen, ohne sie zu hartzucodieren (dh diese), so kann ich ohne Änderung der Objektnamen ändern Code.

Ich interessiere mich nur für die Objektnotation.

EDIT:

ich es nicht richtig machen. Eine der Funktionen war tatsächlich onmousedown Ereignis, also dieser war nicht darin arbeiten ... Dies bezieht sich auf das Objekt, das ausgelöst Ereignis. Ich frage mich, ob es in diesem Fall immer noch möglich ist, auf MyObj zu verweisen.

Antwort

0

Eine der Funktionen war eigentlich onmousedown Ereignis, so war dies nicht die in ihr ... Dies zu das Objekt beziehen, das Ereignis rised. Ich frage mich, ist es immer noch möglich, auf MyObj in einem solchen Fall beziehen.

Ein Weg folgt, obwohl es in diesem Fall nicht sehr nützlich sein kann.

var baz = (function(){ // fake a scope 
    var foo; // foo will exist in the next statement 
    foo = { bar: function(){ return foo } }; 
    return foo; 
})(); 

Die Funktion Wrapper, die sofort ausgeführt wird, wirkt in diesem Block scoped Variablen zu halten (spätere Versionen von JS von Mozilla haben Scoping Syntax verbessert, aber ich gehe davon aus, dass keine Option). In diesem einfachen Beispiel wird foo zurückgegeben und als Wert für baz verwendet, aber wenn Sie wirklich eine Aufgabe ausgeführt haben und sich nicht darum gekümmert haben, ob foo übrig geblieben ist, dann brauchen Sie nur die zweiten beiden Zeilen. Aber wenn es Teil eines größeren Ausdrucks wäre, könnte dieses Idiom nützlich sein.

2

Verwenden Sie this.

ZB:

var MyObj = { 
    f1 : function(){ ... }, 
    f2 : function(){ this.f1(); }} 
Verwandte Themen