jQuery插件如何维护全局状态?

时间:2012-04-19 06:30:13

标签: javascript jquery jquery-plugins

我最近写了我的第一个简单的jQuery插件。我很自豪。

http://jsfiddle.net/johnhoffman/wSeLY/1/

(function($) {
    $.fn.makeRed = function() {
        return this.each(function() {
            $(this).css("color", "#f00");
        });
    }
})(jQuery);

我想知道为什么它有效。我将jQuery对象传递给这个立即运行的封闭函数。

随后,不是| $ |在该匿名函数中对象一个局部变量?它如何更改全局单例jQuery对象?

换句话说,我不是只是通过$.fn.myFunctionName向对象| $ |添加一个函数本地的封闭功能?它如何更改全局jQuery对象并使我的函数(makeRed)可用于我脚本的全局范围内的选择器?

2 个答案:

答案 0 :(得分:2)

Javascript中的对象通过引用传递,因此函数中的任何更新都保存在jQuery对象上。您只需使用名称$来引用它。

我强烈建议您阅读:Javascript: The Good Parts它解释了所有这些。

答案 1 :(得分:2)

  

不是| $ |对象匿名函数中的局部变量?

是的,$是函数中的局部变量但是,这是一个很大但是,它是对全局可访问的jQuery对象的引用。事情看起来像这样:

window.jQuery (global) ----->-----> { ... }
                                    ^
                                    |
$ (local) ------------------>-------+

因此,您有两个指向同一对象的变量,并且在调用匿名函数后该对象仍然存在。

相关问题