以下语法是什么意思?
(function($){
$.fn.columnize = function(options) {
...
什么是 function($)
?
什么是 $.fn. …
?
(function($){
$.fn.columnize = function(options) {
...
什么是 function($)
?
什么是 $.fn. …
?
在编写插件时,这种约定被用于确保不会与使用$符号的其他JavaScript库发生冲突,同时确保插件作者仍然可以使用此符号:
(function($){
...
})(jQuery);
作者声明了一个带有单个参数($)的匿名函数,然后立即将jQuery对象传递给它并调用它。这确保了函数被调用,并且其中的所有内容都已定义。
更长的注释可能是:
function MyDefs($){
...
}
MyDefs(jQuery);
尽管这将在全局命名空间中创建一个名为MyDefs
的变量,但匿名函数模式会使全局命名空间保持为空,避免冲突。
这段代码声明了columnize
函数为jQuery插件,可以在元素上使用$('.someSelector').columnize()
。你可以在这里阅读更多有关插件开发的内容。
这可能是一个jQuery扩展,基本上在结尾加上(jQuery)。
(function($){
//$ is jQuery here
//added columnize function to existing jQuery object
$.fn.columnize = function(options) {
}
})(jQuery);
我刚刚发现这个...这是代理模式吗?
代理模式
将上述知识结合起来,作为JavaScript开发人员,您拥有相当大的能力。一种将其结合起来的方法是在JavaScript中实现代理模式,从而实现面向方面编程(AOP)的基础:
(function() {
// log all calls to setArray
var proxied = jQuery.fn.setArray;
jQuery.fn.setArray = function() {
console.log(this, arguments);
return proxied.apply(this, arguments);
};
})();
$
搞混了。实际上,在JavaScript中,$
是一个有效的变量名(所有包含$
的变量都是如此,来源(PDF))。(function (someVariable) {
这可能看起来更普遍。对于剩下的部分,是代理模式,James Wiseman 的回答解释了发生了什么。
function($) {...}
定义了一个带有名为$
的形式参数的匿名函数。$.fn
指的是变量$
所引用对象的名为fn
的属性。