所以我得到的地方,我需要利用揭示模块模式或对象文本模式,或者是他们相同的模式呢?我不知道。我了解揭示模块模式使用闭包,但我的知识还不深。揭示模块模式我已经研究过,并且有点熟悉它。如何组织的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模式可以参考的答案。 –