Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用$fn和不使用$fn创建Jquery插件之间的区别_Javascript_Jquery_Jquery Plugins - Fatal编程技术网

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