编写更好的jQuery插件

时间:2010-02-28 18:25:53

标签: javascript jquery events plugins

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

例如我有:

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

        if(action == "foo"){

        }

        if(action == "bar"){

        }

        if(action == "grapefruits"){            

        }

    }
})(jQuery);

有没有更好的方法来解决这个问题?

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

2 个答案:

答案 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]();