以下语法是什么意思?
(function($){
$.fn.columnize = function(options) {
...
什么是function($)
?
什么是$.fn. …
?
答案 0 :(得分:17)
在编写插件时使用此约定以确保使用$ notation与其他Javascript库没有任何混淆,同时确保插件作者仍然可以使用此notataion:
(function($){
...
})(jQuery);
作者使用单个参数($)声明一个匿名函数,然后立即调用它并将jQuery对象传递给它。这样可以确保调用函数并定义其中的所有内容。
更长的符号可能是:
function MyDefs($){
...
}
MyDefs(jQuery);
虽然这会在全局命名空间中创建变量MyDefs
。匿名函数模式将全局命名空间留空,避免冲突。
答案 1 :(得分:2)
它将columnize
函数声明为jQuery插件,允许您在像$('.someSelector').columnize()
之类的元素上使用它。您可以阅读有关plugin authoring here的更多信息。
答案 2 :(得分:1)
它可能是一个jQuery扩展,它基本上传递(jQuery),如
(function($){
//$ is jQuery here
//added columnize function to existing jQuery object
$.fn.columnize = function(options) {
}
})(jQuery);
答案 3 :(得分:0)
我刚发现这个......它是代理模式吗?
代理模式
结合上述知识,您可以为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);
};
})();
上面将其代码包装在一个隐藏“代理”变量的函数中。它将jQuery的setArray方法保存在一个闭包中并覆盖它。然后,代理会记录对方法的所有调用,并将调用委托给原始调用。使用apply(this,arguments)可以保证调用者无法注意到原始方法和代理方法之间的区别。
答案 4 :(得分:0)
不要被$
弄糊涂。实际上,$
是JavaScript中的有效变量名称(包含$
,source (PDF)的所有变量都是如此。
所以,第一行可以改写为
(function (someVariable) {
可能看起来更常见。对于其他人,是的,这是一个代理模式,James Wiseman的答案正在解释,发生了什么。
答案 5 :(得分:0)
function($) {...}
使用名为$
的形式参数定义匿名函数。 $.fn
指的是变量fn
引用的对象名为$
的属性。