您知道当我们在页面中<script>
包含jquery.js
时,我们可以像这样使用它:
$.ajax();
我的问题是,jQuery已经在jquery.js中初始化了吗?因为我们不打算使用new
运算符。谁能告诉我初始化是如何发生的?因为我们立即准备了一个jQuery实例。
答案 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();