我正在尝试将jQuery减少到一个非常具体的功能集,以便在产品中使用(以及我的一般学习)。从源头看,这似乎是jQuery库背后的主要结构。它的作品非常棒。
我无法理解的重要部分是jQuery如何返回元素数组,以及保留jQuery对象。
即$(“body”)将返回数组中的正文,但我仍然可以说$(“body”)。hide()(所以我基本上在数组上调用'hide')? / p>
问题:如何返回数组和第一个函数中创建的jQuery对象?
var MyNewLibrary = function (selector, context) {
return new MyNewLibrary.fn.init(selector, context);
};
var $$ = MyNewLibrary;
MyNewLibrary.fn = MyNewLibrary.prototype =
{
el: null,
length: 0,
selector: "",
init: function (selector, context)
{
var elem;
elem = document.getElementById(
selector[0].substr(1, selector[0].length));
if (elem)
{
this.length = 1;
this[0] = elem;
}
this.context = document;
this.selector = selector;
return this;
},
//Example of chained function
Html: function (str) {
if (typeof str == "string") {
this[0].innerHTML = str;
}
if (typeof str == "undefined") {
return this[0].innerHTML;
}
return this;
}
};
MyNewLibrary.fn.init.prototype = MyNewLibrary.fn;
MyNewLibrary.BasicFunction = MyNewLibrary.fn.BasicFunction = function ()
{
return "A string returned by $$.BasicFunction()";
};
答案 0 :(得分:2)
数组是一个对象,一个对象可以有函数,因此通过传递性,数组可以具有函数。如果有多个结果,请继续将它们添加到新创建的库对象中。
this[0] = element1;
this[1] = element2;
// and so on
它不是一个数组,而是一个类似于数组的对象,具有length
属性和相应的数字索引。 jQuery也不返回数组,可以使用
$("<some selector>") instanceof Array; // false
但是,即使按id选择元素,jQuery也会返回这个类似数组的对象。在这种情况下,返回一个类似于数组的对象(jQuery对象),其中包含一个元素。