Javascript I';我想了解jQuery插件的语法
jQuery站点列出了jQuery的基本插件语法,如下所示:Javascript I';我想了解jQuery插件的语法,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,jQuery站点列出了jQuery的基本插件语法,如下所示: (function( $ ){ $.fn.myPlugin = function() { // there's no need to do $(this) because // "this" is already a jquery object // $(this) would be the same as $($('#element')); this.fadeIn('nor
(function( $ ){
$.fn.myPlugin = function() {
// there's no need to do $(this) because
// "this" is already a jquery object
// $(this) would be the same as $($('#element'));
this.fadeIn('normal', function(){
// the this keyword is a DOM element
});
};
})( jQuery );
我只是想从Javascript的角度来理解那里发生了什么,因为它看起来不像是遵循我以前见过的JS所做的任何语法。下面是我的问题列表:
(the_function)( jQuery );
(jQuery);“在做什么?”?_函数周围的括号真的有必要吗?他们为什么在那里?有没有其他类似的代码(function( $ ){
})( jQuery );
这是一个自动执行的匿名函数,它在参数中使用$
,这样您就可以在该函数中使用它($
),而不用担心与其他库冲突,因为在其他库中$
也有特殊的含义。这种模式在编写jQuery插件时特别有用
您可以在此处写入任何字符,而不是$
:
(function(j){
// can do something like
j.fn.function_name = function(x){};
})(jQuery);
在这里,j
将自动赶上末尾指定的jQuery(jQuery)
。或者,您可以完全省略参数,但是您必须在所有地方使用jQuery
关键字,而不是$
,而不必担心冲突。因此,$
被包装在速记参数中,这样您就可以在该函数中编写$
而不是jQuery
如果您查看jQuery的源代码,就会发现所有内容都包含在以下两个方面:
(function( window, undefined ) {
// jQuery code
})(window);
这也是一个带有参数的自动执行匿名函数。将创建一个窗口
(和未定义
)参数,并将其映射到底部的全局窗口
对象(窗口)
。这是目前流行的模式,速度几乎没有提高,因为这里的window
将从参数中查看,而不是从下面映射的全局window
对象中查看
$.fn
是jQuery的对象,您可以在其中创建新函数(也是一个对象)或插件本身,以便jQuery将插件包装在其$.fn
对象中并使其可用
有趣的是,我在这里回答了类似的问题: 您还可以查看本文,了解更多关于我编写的自动执行函数的信息:
基本插件语法允许您使用
$
引用插件主体中的jQuery
,而不管加载插件时的$
标识如何。这可以防止与其他库(尤其是原型库)的命名冲突
该语法定义了一个函数,该函数接受一个名为$
的参数,因此您可以在函数体中将其称为$
,然后立即调用该函数,将jQuery
作为参数输入
这也有助于不污染全局名称空间(因此在插件主体中声明
var myvar=123;
不会突然定义window.myvar
),但表面上的主要目的是允许您使用$
,其中$
可能已经被重新定义。最后的jQuery会自动通过(jQuery)转到函数,以便您可以在插件中使用$符号。你也可以
(function(foo){
foo.fn.myPlugin = function() {
this.fadeIn('normal', function(){
});
};
})( jQuery );
您正在处理一个自调用匿名函数。将jQuery插件封装在这样一个函数中,以确保
$
符号绑定到jQuery
对象,这类似于“最佳实践”
例如:
(function(foo) {
alert(foo);
}('BAR'));
当放入
块时,这将向条发出警报。参数BAR
被传递给调用自身的函数
同样的原理也发生在代码中,jQuery
对象被传递给函数,因此$
肯定会引用jQuery对象
function(x){
x...
}
它只是一个没有名字的函数,只接受一个参数“x”,并使用x进行操作
您可以使用$,而不是“x”,它是一个常用的变量名,但它仍然是合法的
function($){
$...
}
我将把它放在括号中,以确保它解析为表达式:
(function($){
$....
})
要调用函数,可以在函数后面加上()和一系列参数。例如,如果我们想调用此函数,将值$
传入3,我们将执行以下操作:
(function($){
$...
})(3);
为了方便起见,让我们调用此函数并将jQuery作为变量传入:
(function($){
$....
})(jQuery);
这将创建一个新函数,该函数接受一个参数,然后调用该函数,并将jQuery作为值传入
为什么?
- 因为每次想用jQuery做点什么的时候都要编写jQuery是一件乏味的事情
为什么不直接编写$=jQuery
- 因为其他人可能会将$定义为其他含义。这保证了$的任何其他含义都会受到此含义的影响
要清楚地解释这一点以及其他现代javascript技巧和常见做法,我建议阅读javascript Garden
它特别有用,因为其中许多模式在许多库中被广泛使用,但没有得到真正的解释。这里的其他答案很好,但有一个重要的问题尚未解决。你说:
所以它正在创建一个函数,据我所知,它永远不会运行,参数$,已经定义好了
不能保证全局变量$
可用。默认情况下,jQuery在全局范围内创建两个变量:$
和jQuery
(这两个变量是同一对象的别名)。然而,<
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
jQuery.noConflict();
</script>