2011-01-05 63 views
3

內我在做在JavaScript我自己的命名空間的過程...訪問我的公開方法從我的命名空間

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

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

我是新來的這些類型的高級JavaScript技術,我想找出從我的命名空間中調用公共方法的最佳方式。看來,在我的公開方法this被設置爲myNamespace

要我打電話公共方法,如...

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

或...

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

有什麼不同?

回答

3

我看到它,如果你使用this您使用的是直接引用的對象,而如果使用my,解釋需要遍歷作用域鏈,直到找到mywindow屬性的方式。

但也可能有其他方式的爭論。

編輯:

我要指出的是,由於this確定的函數是如何調用,它會要求啓動對象是對象。

所以這會工作:

my.anotherPublicMethod(); 

但這並不:

var test = my.anotherPublicMethod; 
test(); 

如果這是有可能的,那麼你應該使用my,或其他一些直接引用的對象。您可以通過維護對該對象的引用來減少範圍鏈遍歷。你的myNamespace變量應該工作。


有點偏離主題,但我也會注意到你的代碼不會按照它的方式工作。

這條線:

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

...沒有進入myNamespace變量。

也許你的意思是更像這樣的東西?

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

ha - 良好的呼叫!不是脫離主題,當我爲這個問題剝離我的命名空間時,我犯了一個錯誤。編輯工作=) – 2011-01-05 19:48:25

+0

是正好.... – 2011-01-05 19:49:03

+0

我是新來的整個使用JavaScript,而不是依靠jQuery的東西......我的大腦傷害。 – 2011-01-05 19:50:16