我一直在搞乱jQuery插件代码,我试图将所有常见变量放到一个对象中以便于访问。我在下面列举了一些关于我是如何做到这一点的例子,但我想知道其他人如何处理这个问题。
让我说我有这个
var x = function(options){
var defaults = {
ulist : $('ul#list'),
listLen : $('ul#list').children().length
}
$.extend(options, defaults);
// do other stuff
}
我要做的是使用ulist
对象作为基础,然后找到li
的数量
我想我可以这样做:
var x = function(options){
var defaults = {
ulist : $('ul#list'),
listLen : 0
}
defaults.listLen = defaults.ulist.children().length;
$.extend(options, defaults);
// do other stuff
}
或者这个:
var x = function(options){
var defaults = {
ulist : $('ul#list')
};
var defaults2 = {
listLen : defaults.ulist.children().length
}
$.extend(defaults, defaults2);
$.extend(options, defaults);
// do other stuff
}
上面的代码示例只是拼凑在一起,只是为了让你的想法得到解决。无论如何,还有更好的方法吗?
答案 0 :(得分:1)
我会说您发布的此版本,但无需将listLen
初始化为0
。
var x = function(options){
var defaults = {
ulist : $('ul#list'),
listLen : 0 // Remove this line
}
defaults.listLen = defaults.ulist.children().length;
$.extend(options, defaults);
// do other stuff
}
修改强>
您的第二个解决方案也可以,但不需要对$.extend()
进行两次调用。它可以接受多个对象。
$.extend(options, defaults, defaults2);
您的第一个解决方案似乎仍然更好。
修改强>
(正如所指出的,你可以使用一个函数。虽然我仍然在defaults
对象的初始化之外分配函数,所以你可以在最后添加函数调用运算符()
,并称之为财产。
var x = function(options){
var defaults = {
ulist: $('ul#list')
}
defaults.listLen = function() {return defaults.ulist.children().length}();
}
现在您可以像属性一样访问defaults.listLen
并获取函数调用的结果,就像在jQuery对象上调用.length
一样。
答案 1 :(得分:0)
Mike Alsup的jQuery插件开发模式已有几年历史,但已经老化了,并且仍然是插件开发的一个很好的起点。
http://www.learningjquery.com/2007/10/a-plugin-development-pattern