这个JavaScript / jQuery语法是什么意思?
以下语法是什么意思?
(function($){ $.fn.columnize = function(options) { ...
什么是function($)
?
什么是$.fn. …
$.fn. …
?
这个约定在编写插件时使用,以确保没有使用$符号的其他Javascript库的confilict,同时确保插件的作者仍然可以使用这个notataion:
(function($){ ... })(jQuery);
作者声明一个具有单个参数($)的匿名函数,然后立即调用它并将jQuery对象传递给它。 这确保函数被调用,并且它的所有内容都被定义了。
更长的符号可能是:
function MyDefs($){ ... } MyDefs(jQuery);
虽然这会在全局命名空间中创build一个variablesMyDefs
。 匿名函数模式将全局名称空间留空,从而避免冲突。
它将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); }; })();
上面的代码包含在一个函数中以隐藏“代理”variables。 它将jQuery的setArray方法保存在闭包中并覆盖它。 代理然后logging对该方法的所有调用并将该调用委托给原始。 使用apply(this,arguments)可以保证调用者不会注意到原始代码和代理方法之间的区别。
不要被$
弄糊涂了。 实际上, $
是JavaScript中的有效variables名(所有包含$
, source(PDF)的variables)。
所以,第一行可以改写为
(function (someVariable) {
这可能看起来更常见。 其余的,是的,这是一个代理模式,詹姆斯怀斯曼的回答是解释,发生了什么事情。
function($) {...}
定义了一个名为$
的forms参数的匿名函数。 $.fn
引用由variables$
引用的对象的名称为fn
的属性。