$();
能在控制器里面看到返回的是一个数组[];
在jQuery源码当中 jQuery.fn.init
对象中有如下代码
// HANDLE: $(""), $(null), $(undefined), $(false)
if ( !selector ) {
console.log(this)
return this;
}
Query()是我模拟jQuery写的
我奇怪的是jQuery()返回的是一个像数组一样的[]
而我写的返回是一个Query.fn.init
对象
所以想问下jQuery返回的[],是怎么样实现的
jQuery = function(selector, context) {
// The jQuery object is actually just the init constructor 'enhanced'
// Need init if jQuery is called (just allow error to be thrown if not included)
return new jQuery.fn.init(selector, context);
}
init = jQuery.fn.init = function(selector, context) {}
init.prototype = jQuery.fn
看上面这三段代码,可以了解$(...)返回的是一个 jQuery.fn.init
对象,jQuery.fn.init
是一个构造函数,其原型就是 jQuery.fn。
再看看 jQuery.fn 的定义(精简代码)
jQuery.fn = jQuery.prototype = {
jquery: version,
constructor: jQuery,
// The default length of a jQuery object is 0
length: 0,
toArray: function() {},
each: function(callback, args) {},
map: function(callback) {},
slice: function() {},
// For internal use only.
// Behaves like an Array's method, not like a jQuery method.
push: push,
};
可以看到这是一个类似数组的对象,所以 $(...) 得到的是一个类数组对象,而不是真正的数组,用 Array.isArray 很容易检查出来。它作为原型,提供了 each 和 map 等方法。
如果要把它变成真正的数组,需要调用其 toArray() 方法
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。