2016-11-29 138 views
-1

我在写一些自定义的jQuery插件,我有下面的代码 扩展了jQuery:jQuery扩展,我可以让这个代码更优雅吗?

(function ($) { 
    $.fn.extend({  

     pluginOne: function() { return this.each(pluginOneFN) }, 
     pluginTwo: function() { return this.each(pluginTwoFN) }, 
     pluginThree: function (p1, p2) { 
      return this.each(function() { 
       pluginThreeFN.call(this, p1, p2); 
      }); 
     }  

    }); 
})(jQuery); 

现在pluginOnepluginTwo是确定的,但pluginThree看起来杂乱无章。

pluginThree需要一些参数,我想知道 有没有更短或更优雅的方式来写这段扩展代码插件3?

+3

不,就是这样。虽然我没有看到任何问题。我认为你会发现所有匿名的'function()'定义不美观?虽然这只是JS的方式。 –

+0

我不认为它是混乱的,可读的,可以理解的。也许你可以使用'arguments'来保存字符'p1'和'p2'。但是你仍然需要将它保存到一个局部变量中,所以......就像我想的那样离开它。 –

+0

也许更短,更优雅的是取决于你认为优雅。但我认为它很好。 – Seb

回答

0

我只能想到的一点是可重用性的改进。你可以引入一个函数来初始化插件,支持参数。

(function ($) { 

    $.fn.initializePlugin = function(pluginFn, args) { 
     return this.each(function() { 
      pluginFn.apply(this, args); 
     }); 
    }; 

    $.fn.extend({  
     pluginOne: function() { return this.each(pluginOneFN) }, 
     pluginTwo: function() { return this.each(pluginTwoFN) }, 
     pluginThree: function() { return this.initializePlugin(pluginThreeFN, arguments) } 
    }); 
})(jQuery); 

请注意,我没有测试过这个代码,它只是为了演示这个想法。另外,如果我正在创建插件,我将遵循现有的约定,即只使用一个参数,这是初始化时的某种options对象,或调用方法时的某种对象。你的方法不能支持这个,我的答案也不能。您可以检查bootstrap的源代码,以获得这种插件系统的良好框架实现。

+0

我也在这个方向思考,很好! – Dusan

+0

对不起,我在代码中乱了一下,现在应该会更好。 –

+0

Downvoter,请您检查我的编辑并留下评论,如果仍有不正确的地方? –