Javascript 使用$fn和不使用$fn创建Jquery插件之间的区别
我正在寻找一些Javascript 使用$fn和不使用$fn创建Jquery插件之间的区别,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我正在寻找一些Jquery插件,我想构建自己的插件。在所有教程中,我看到的语法如下: (function($) { $.fn.myPlugIN = function() { // Add plugin code here }; })(jQuery); 但是当我看到一些流行插件的代码时,比如iScroll.js、Carousel、js 我看到他们不使用$.fn语法,而是在一个函数中编写 (function(){ function iScroll (el, options) {
Jquery插件
,我想构建自己的插件。在所有教程中,我看到的语法如下:
(function($) {
$.fn.myPlugIN = function() {
// Add plugin code here
};
})(jQuery);
但是当我看到一些流行插件的代码时,比如iScroll.js、Carousel、js
我看到他们不使用$.fn语法,而是在一个函数中编写
(function(){
function iScroll (el, options) {
var that = this, i;
//some code
}
})();
这些函数和它们的使用之间有什么区别?这就是jQuery插件和基本javascript插件(或模块)之间的区别 iScroll不使用jQuery,它没有理由被定义为jQuery插件。与大多数不基于特定框架的javascript插件一样,它基于非常方便的框架,允许您定义许多私有变量,而不会使全局名称空间混乱。显示的代码段不包含在全局命名空间中导出唯一变量的部分 见:
iScroll
(我假设Carousel
也不是jQuery插件,所以它们的代码隐藏语法会有点不同
jQuery插件是一个扩展函数,可用于jQuery对象。例如,如果我创建一个foo
jQuery插件,我应该能够通过$(“#some element').foo()之类的东西来使用它代码>
为了能够以这种方式工作,jQuery插件通过向$.fn
变量添加函数来扩展$
原型,如下所示:
$.fn.foo = function () {
// foo!
};
另一方面,iScroll
,不是jQuery插件。它不适用于jQuery对象,因此您不希望它像$(“#some element').iScroll()那样工作代码>。您可以通过调用iScroll()
本身来使用它
var obj = new iScroll('container');
正如您所料,使用方式的不同将决定在其脚本文件中声明插件的不同方式。您确实需要进一步解释这个答案,这不是一个正确的答案。我认为它实际上总结得相当好。@JonTaylor这确实是唯一的原因。如果您的组件不使用某项技术,则不能将其定义为该技术的插件。@JonTaylor OP在问题中已经显示了jQuery插件的“正常”模式。“没必要在这里详述,伊姆霍。”我不同意。jQuery插件模式有很好的文档记录,并且很容易识别。答案真的不需要是“因为第二个示例不是jQuery插件”。您的第二个代码片段是否完整?就目前的情况来看,它不像iScroll()。我们知道这一点,不显示这一行并不重要。这很简单-如果插件不添加到$.fn
(对于元素处理程序)或$
(对于实用程序函数),它就不是jQuery插件!
var obj = new iScroll('container');