目前我的jQuery插件在if语句中运行它的逻辑。
例如我有:
(function($) {
$.fn.myplugin = function(action) {
if(action == "foo"){
}
if(action == "bar"){
}
if(action == "grapefruits"){
}
}
})(jQuery);
有没有更好的方法来解决这个问题?
与事件处理程序一样,我可以在插件中声明它们吗?
答案 0 :(得分:9)
您可以在对象中存储不同的函数并使用索引器,如下所示:
(function($) {
var methods = {
foo: function(action) { ... },
bar: function(action, someParam) { ... },
grapefruits: function(action, param1, param2) { ... },
...
};
$.fn.myplugin = function(action) {
methods[action].apply(this, arguments);
}
})(jQuery);
答案 1 :(得分:2)
没有理由多次检查动作,是吗?你也可以使用if。我不喜欢switch
个人的语法,而更喜欢这种风格。你可以像
if(action == "foo"){
}
else if(action == "bar"){
}
else if(action == "grapefruits"){
}
else{
//this is the default/unspecified case
}
另一个选择是将每个作为名称存储在对象中。例如,这在Python中也是如此。
var plugin_actions={
'foo':function(){},
'bar':function(){},
'grapefruits':function(){}
}
plugin_actions[action]();