您的第一個錯誤,你使用this
,我敢肯定你的意思ns
:
ns.DoStuff = function() {
};
離開那個放在一邊,你的第一種方法往往是更好,因爲您已經爲自己創建了一個很好的小範圍函數,它允許您爲您在名稱空間上創建的所有公共方法提供私有數據和函數,而無需使它們成爲全局變量。例如:
(function(ns) {
function privateFunction() {
}
ns.DoStuff = function() {
privateFunction(); // <=== works fine
};
})(myNamespace);]
privateFunction(); // <=== doesn't work, because it's private
我喜歡做這種方式部分原因是I have thing against anonymous functions,所以我不會如上定義DoStuff
,而是這樣的:
(function(ns) {
ns.DoStuff = Namespace$DoStuff;
function Namespace$DoStuff() {
}
})(myNamespace);
現在我已經分配給功能myNamespace.DoStuff
有一個正確的名字,當我調試我的代碼時,它可以幫助我解決問題。但是這個名字不會污染全局命名空間,這可以幫助我保持健全,避免與其他代碼發生衝突。
太棒了,謝謝。我根據'this'錯誤編輯了我的問題。 – 2012-02-13 16:52:45
呃哦...你的編輯對我來說有點複雜( - 你真的是指'myNamespace $ DoStuff'嗎?'$'符號代表那個名字嗎? – 2012-02-13 16:55:03
@ChaseFlorell:名字可以是任何你想要的--'myNamespace $ DoStuff','myNamespace_DoStuff','fred',無論你想在調試器中的調用堆棧上看到什麼::-) $是不重要的,它只是標識符的有效字符。在我自己的工作中,我使用初始上限的「名稱空間」(通常是例如'Nifty'),並使用約定' $ <函數名>來獲得由構造函數創建的實例屬性的函數,並使用' _函數將直接位於命名空間上。 (並且我在上面應用了錯誤的!) –
2012-02-13 17:02:11