如何从同一个Object返回一个Array或一个Element? (jQuery的)

时间:2011-04-18 02:52:00

标签: javascript jquery

我正在尝试将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()";
};

1 个答案:

答案 0 :(得分:2)

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

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

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

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

但是,即使按id选择元素,jQuery也会返回这个类似数组的对象。在这种情况下,返回一个类似于数组的对象(jQuery对象),其中包含一个元素。