所以我得到的地方,我需要利用揭示模塊模式或對象文本模式,或者是他們相同的模式呢?我不知道。我瞭解揭示模塊模式使用閉包,但我的知識還不深。揭示模塊模式我已經研究過,並且有點熟悉它。如何組織的jQuery在我的應用程序
我現在的情況是我使用jqGrid,我想將常見設置和事件函數合併到一個core.js或global.js文件中,然後重用所有這些設置和回調函數(如onSortCol func)每次我創建一個新的jqGrid。我希望能夠添加或編輯jqGrid的默認設置/選項,這使我不知道如何使用對象字面模式或揭示模塊模式將其設置爲global.js文件中的默認設置。
我看這篇文章了:
http://rmurphey.com/blog/2009/10/15/using-objects-to-organize-your-code/
而且很快我想更好地瞭解一下這個代碼是這樣做的:
var myFeature = {
config : {
wrapper : '#myFeature',
container : 'div',
urlBase : 'foo.php?item='
},
init : function(config) {
$.extend(myFeature.config, config);
$(myFeature.config.wrapper).find('li').
each(function() {
myFeature.getContent($(this));
}).
click(function() {
myFeature.showContent($(this));
});
},
buildUrl : function($li) {
return myFeature.config.urlBase + $li.attr('id');
},
getContent : function($li) {
$li.append(myFeature.config.container);
var url = myFeature.buildUrl($li);
$li.find(myFeature.config.container).load(url);
},
showContent : function($li) {
$li.find('div').show();
myFeature.hideContent($li.siblings());
},
hideContent : function($elements) {
$elements.find('div').hide();
}
};
$(document).ready(function() { myFeature.init(); });
就讓我們先從初始化函數。首先,配置「成員」是myFeature對象中的一個對象,是否正確的措辭?其次,init「成員」也是myFeature對象字面值中的一個對象,或者因爲它是一個函數,它的概念化方式與myFeature的配置「成員」不同?第三,配置的範圍可以傳遞給init函數,就像它在myFeature對象中那樣?展望這個代碼在我希望有做這在我的doc.ready:
$(document).ready(function() {
var myF = new myF(); //new keyword not needed but can declared to emulate familiar
object oriented programming concepts is what I think
myF.init(myF.config); //I know I don't have to do this and this doesn't even make exact
sense but just trying to express how my brain is working on this right now
});
我會從那裏開始,看看我得到了什麼樣的答案,並相應地調整我的問題。
UPDATE 所以配置和init是可以傳遞一個可選的配置對象,以免被覆蓋並追加傳遞配置到目標myFeature.Config我的功能和init()的性質。
下一個問題,在init執行有$ .extend(myFeature.config,配置)。爲什麼不是$ .extend(this.config,config)行?這是我認爲我想要使用揭示模塊模式的地方,因爲我可以定義一個名爲「self」的變量,並在整個包含myFeature的成員中引用這個。我不明白在對象字面模式中,init屬性如何在函數內訪問myFeature。看來我的功能是全局範圍和它的所有屬性和本身可以由任何人在任何時候訪問,我知道這是JavaScript的性質,但...
提前感謝!
你到底在問什麼? –
如果我針對每個問題在SO上創建單個問題,會不會更好?總體問題是關於javascript/jQuery中的模式的一個主題,所以我發現它將自身構建成一個簡潔的問題,許多開發人員希望快速理解未來流行的JavaScript模式可以參考的答案。 –