Javascript 编写更好的jQuery插件

Javascript 编写更好的jQuery插件,javascript,jquery,events,plugins,Javascript,Jquery,Events,Plugins,目前,我有我的jQuery插件在运行,它的逻辑在if语句中 例如,我有: (function($) { $.fn.myplugin = function(action) { if(action == "foo"){ } if(action == "bar"){ } if(action == "grapefruits"){ } } })(jQuery

目前,我有我的jQuery插件在运行,它的逻辑在if语句中

例如,我有:

(function($) {
    $.fn.myplugin = function(action) {

        if(action == "foo"){

        }

        if(action == "bar"){

        }

        if(action == "grapefruits"){            

        }

    }
})(jQuery);
有没有更好的办法


与事件处理程序一样,我可以在插件中声明它们吗?

您可以在对象中存储不同的函数并使用索引器,如下所示:

(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);

没有理由多次检查动作,是吗?如果需要,您也可以使用else。我个人不喜欢
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]();

第二个解决方案将丢失
上下文和参数。查看我的答案。我可以用
$(“…”)
包装一个字符串并添加一些可以操作该字符串的函数吗?