如何初始化jQuery $?它如何在全球范围内使用?

时间:2015-02-26 20:48:57

标签: javascript jquery

您知道当我们在页面中<script>包含jquery.js时,我们可以像这样使用它:

$.ajax();

我的问题是,jQuery已经在jquery.js中初始化了吗?因为我们不打算使用new运算符。谁能告诉我初始化是如何发生的?因为我们立即准备了一个jQuery实例。

4 个答案:

答案 0 :(得分:5)

一个函数只是一个对象,而一个美元符号只是一个变量

function $(something, more) {
    return new $.fn.init(arguments);
}

$.fn = $.prototype;

$.fn.init = function() {
     // get elements and stuff
}

$.ajax = function(params) {
    // send ajax
}

这意味着你可以创建一个名为$的函数,并为它添加属性本身的函数,jQuery在调用{{{}时会在内部为你创建一个new实例。 1}}直接运行,但$()是一个不同的函数,只是作为属性添加到$.ajax

答案 1 :(得分:2)

jQuery脚本创建一个全局变量$

在Javascript中,与Java不同,您可以不使用new运算符。它仅取决于为您要使用的对象构建API的人员。

示例:

// Creating an Object with new
var obj = new Object();

// Same without new
var obj2 = {};

建立图书馆时:

// `new` will be needed (or you could change the scope of 'this')
var fooFactory = function() {
  this.getColor = function() { return 'blue'};
}
var obj = new fooFactory();
obj.getColor(); // -> 'blue'

// no 'new' needed
window.bar = {
    getColor: function() { return 'blue' }
}
var obj2 = bar; // no 'new' here
obj.getColor(); // -> 'blue'

答案 2 :(得分:2)

如果你打开jquery javascript文件,你会在文件的最底部看到类似

的文件
var
    // Map over jQuery in case of overwrite
    _jQuery = window.jQuery,

    // Map over the $ in case of overwrite
    _$ = window.$;

jQuery.noConflict = function( deep ) {
    if ( window.$ === jQuery ) {
        window.$ = _$;
    }

    if ( deep && window.jQuery === jQuery ) {
        window.jQuery = _jQuery;
    }

    return jQuery;
};

// Expose jQuery and $ identifiers, even in
// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
// and CommonJS for browser emulators (#13566)
if ( typeof noGlobal === strundefined ) {
    window.jQuery = window.$ = jQuery;
}

您可以在文本的最底部看到jQuery库设置窗口。$ variable = jQuery本身,这就是为什么您的页面知道$是什么:)

您应该能够在jquery- {version} .js文件的最底部找到此文本

答案 3 :(得分:1)

非常清楚,在加载jQuery之后,$是全局范围内的函数。您可以通过调用jQuery.noConflict来使用不同的符号,但无论如何。

在Javascript中,您可以像处理任何其他对象一样将属性附加到函数。这允许类似于Java / C#/ C ++ / etc中类的static成员的行为。可能任何函数最重要的静态成员是prototype,因为它允许您使用new运算符向该函数构造的所有变量添加函数和属性。但是,没有什么可以阻止您直接向原始函数添加函数。

var __ = function(s) {
    this.string = s;
};

__.bacon = function() {
    return "delicious!";
};

var el = document.getElementById("bacon");
el.innerHTML = __.bacon();