如何从同一对象返回数组或元素?(jQuery)

How to return an Array or an Element all from the same Object? (jQuery)

本文关键字:元素 jQuery 数组 返回 对象      更新时间:2023-09-26

我试图将jQuery简化为一组非常具体的函数,以便在产品中使用(以及我的一般学习)。浏览源代码,这似乎是jQuery库背后的主要结构。效果非常好。

我不明白的是,jQuery如何返回元素数组,以及如何保留jQuery对象。

例如,$("body")将返回数组中的主体,但我仍然可以说$("body").hide()(所以我实际上是在数组上调用'hide' ?)

问题:我如何返回数组和在第一个函数中创建的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()";
};

数组是一个对象,对象可以有函数,因此通过传递性,数组可以有函数。如果有多个结果,继续将它们添加到库的新创建对象中。

this[0] = element1;
this[1] = element2;
// and so on

它不是一个数组,而是一个类似数组的对象,具有length属性和相应的数字索引。jQuery也不返回数组,可以用

进行测试。
$("<some selector>") instanceof Array; // false

然而,jQuery总是返回这个类似数组的对象,即使是通过id选择元素。在这种情况下,返回一个类似数组的对象(jQuery对象),其中包含一个元素。