2011-01-05 4 views
3

Ich bin in dem Prozess in JavaScript meinen eigenen Namensraum zu machen ...Zugriff auf meine öffentlichen Methoden aus meinem Namensraum

(function(window){ 
    (function(){ 
     var myNamespace = { 
      somePublicMethod: function(){ 
      }, 
      anotherPublicMethod: function(){ 
      } 
     } 

     return (window.myNamespace = window.my = myNamespace) 
    }()); 
})(window); 

Ich bin neu in diese Art von fortgeschrittenen Techniken JavaScript und ich versuche zu finde heraus, wie ich öffentliche Methoden aus meinem Namespace heraus am besten aufrufen kann. Es scheint, dass innerhalb meiner öffentlichen Methoden this auf myNamespace gesetzt wird.

Soll ich wie öffentliche Methoden aufrufen ...

AnotherPublicMethod: function(){ 
    this.somePublicMethod() 
} 

oder ...

AnotherPublicMethod: function(){ 
    my.somePublicMethod(); 
} 

gibt es einen Unterschied?

Antwort

3

So wie ich es sehe, wenn Sie verwenden this Sie einen direkten Verweis auf das Objekt verwenden, während, wenn Sie my verwenden, würde der Interpreter den Umfang Kette zu durchqueren müssen, bis sie my als Eigenschaft window findet .

Aber es kann Argumente auch andersherum geben.

EDIT:

Ich sollte beachten, dass seit this von bestimmt wird, wie die Funktion aufgerufen wird, würde es erfordern, dass das Objekt Aktivierung dass Objekt sein.

dies würde So arbeiten:

my.anotherPublicMethod(); 

aber dies würde nicht:

var test = my.anotherPublicMethod; 
test(); 

Wenn das eine Möglichkeit ist, dann sollten Sie my oder eine andere direkte Referenz auf das Objekt verwenden. Sie können den Durchlauf der Umfangskette reduzieren, indem Sie einen Verweis auf das Objekt beibehalten. Ihre myNamespace Variable sollte funktionieren.


Ein wenig off Thema, aber ich würde auch feststellen, dass Ihr Code nicht so funktioniert, wie es ist.

Diese Zeile:

return (window.myNamespace = window.my = myNamespace) 

... hat keinen Zugriff auf die myNamespace Variable.

Vielleicht haben Sie etwas mehr so ​​gemeint?

(function(window){ 
    window.myNamespace = window.my = (function(){ 
     var myNamespace = { 
      somePublicMethod: function(){ 
      }, 
      anotherPublicMethod: function(){ 
      } 
     } 
     return myNamespace; 
    }()); 
})(window); 
+0

ha - guten Ruf! überhaupt kein Thema, ich habe einen Fehler gemacht, als ich meinen Namensraum für diese Frage streifte. Edited to work =) –

+0

ja genau .... –

+0

Ich bin neu zu diesem Ganzen mit JavaScript anstatt auf jQuery Sache zu verlassen ... mein Gehirn tut weh. –