我有两个关于以下代码段的问题。
(1)。 “返回新的jQuery.fn.init(选择器,上下文,rootjQuery);”的目的是什么?为什么它会在JQuery函数中返回另一个实例?
(2)。为什么将prototype.constructor重新定义为JQuery?
// Define a local copy of jQuery
var jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context, rootjQuery );
},
... ...
jQuery.fn = jQuery.prototype = {
constructor: jQuery,
init: function( selector, context, rootjQuery ) {
var match, elem, ret, doc;
谢谢!
答案 0 :(得分:4)
new JQuery.fn.init(...)
返回。通过这种方式,开发人员无需在new
之前添加$(..)
关键字。JQuery.fn
是JQuery.prototype
的快捷方式。写JQuery.fn.customMethod = function(){...}
比写JQuery.prototype.customMethod = ...
更方便。由于JQuery通常也可以通过$
或$j
访问,因此引用JQuery.prototype
的简短方法是$.fn
。答案 1 :(得分:1)
(2)。为什么将prototype.constructor重新定义为JQuery?
我认为原因是在每个jQuery对象中保留一个构造函数引用,实际上是它自己(它创建一个循环引用)。实际上,通过使用这段代码覆盖jQuery.prototype
对象
jQuery.fn = jQuery.prototype = { ... }
你失去了“自动创建”的构造函数(指向它创建的函数,在本例中为jQuery.fn.init
),因此你需要明确地设置它。
我发现这个链接非常有助于理解javascript原型和构造函数:
http://joost.zeekat.nl/constructors-considered-mildly-confusing.html