这个JavaScript / jQuery语法是什么意思?

时间:2010-02-22 08:19:10

标签: javascript jquery

以下语法是什么意思?

(function($){
    $.fn.columnize = function(options) {
    ...

什么是function($)

什么是$.fn. …

6 个答案:

答案 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引用的对象名为$的属性。