var Test = (function() {
return {
useSub: function() {
this.Sub.sayHi();
},
init: function() {
$(document).ready(this.useSub);
}
};
})();
Test.Sub = (function() {
return {
sayHi: function() {
alert('hi');
}
};
})();
Test.useSub(); // works
Test.init(); // explodes
上面我正在嘗試創建一個Test名稱空間並向它添加一個對象Sub。直到我嘗試在jQuery中使用該對象時,我一直做得很好。錯誤是「Uncaught TypeError:無法調用未定義的方法'sayHi'」。如果有更好的方法來做到這一點,我願意接受。如何將對象添加到JavaScript命名空間?
編輯:
顯然這是演示代碼。在我的實際應用中,我有,因爲我認爲這是最明顯的去解決方案是這一個:
var Namespace (function() {
return {
init: function() {
$(document).ready(function() {
Namespace.onReady();
}
},
onReady: function() {
alert('Now I am back in the Namespace scope. Proceed as planned');
}
};
})();
EDIT2:所有的jQuery的回調似乎要求他們以這種方式使用,否則作用域是搞砸了。
取代這個+1我更喜歡'that = this',但是,這是解決方案。 – Skilldrick 2010-06-16 19:35:46
var that = this; $(document).ready(function(){that.useSub();}); 適合我。 – Skilldrick 2010-06-16 19:38:25
@Skilldrick:我用JS Bin對它進行了測試,它在那裏不起作用,但是它可能與它們的設置有關。 – 2010-06-16 19:39:16