jQuery启动

时间:2010-09-08 16:34:38

标签: jquery javascript

在使用jQuery很长一段时间之后我有一个问题,我正在使用jQuery模式(样式)编写一个简单的代码,

(function(window, undefined) {
     var jQuery = function (s, c) { ... }
}) (window);

众所周知,jQuery是在一个自我执行匿名函数中定义的,我猜测它的作用域(jQuery)应该仅限于那个匿名函数,但我们如何才能访问jQuery之外的jQuery匿名方法?如果我的假设是错的......请纠正我。

我尝试编写类似于jQuery激情的代码,即用匿名方法包装我的整个代码,比如

(function( w, u ) {
  var JS = function() { return JS.fn.init();};

  JS.fn = JS.prototype = {
     init : function () {
         alert('Initiated');
         return this;
     }
  };

}) (window);

当我尝试拨打JS().init();时,我的firebug控制台中出现错误JS is not defined。我哪里错了?是由于范围限制还是编写不好的代码?

1 个答案:

答案 0 :(得分:3)

最后,将您的对象分配给window,即使在您的匿名函数之外,它也可以全局使用。

window.JS = JS;

在jQuery的源代码中查看此行very end,其中显示了为什么jQuery$在匿名函数之外定义。

window.jQuery = window.$ = jQuery;

除了范围,还有一些值得注意的事情,

JS.init()不存在,因为没有创建新对象。使用init构造函数创建一个新对象。

var JS = function() { return new JS.fn.init(); };

通过在调用JS()时创建新函数,您不再需要自己调用init。要创建新对象,只需使用:

var foo = JS();

以下是完整的资料来源:

(function( w, u ) {
    var JS = function() { 
        // create a new object
        return new JS.fn.init();
    };

    JS.fn = JS.prototype = {
        init : function () {
            console.log('Initiated');
            return this; // not needed
        }
    };

    // link the init constructor with JS.prototype
    JS.fn.init.prototype = JS.fn;

    // make globally available
    window.JS = JS;

}) (window);