如何从构造函数返回数组并成功链接Javascript中的对象

时间:2015-07-23 01:42:06

标签: javascript jquery arrays constructor

我一直在浏览jQuery代码,我看到了一些有这个问题的链接。我再次问它,因为我并不真正了解它们,所以请不要将此问题标记为重复。我已经浏览了以下stackoverflow链接:

How can jQuery return an array and still have it to be a jQuery object

How does jQuery chaining work

How does jQuery return an array of the selected objects

通过所有这些链接,我不知道它是如何工作的。我要问的只是一个从构造函数对象返回数组并仍然链接它的一个非常简单的例子。我尝试了以下代码:

(function(window, document, undefined)
{
    var lhd = function(selector)
    {
        return new Lhd(selector);
    }

    function Lhd(selector)
    {
        var elem = document.querySelectorAll(selector),
            elems = {};

        return this.makeArray(elems, elem);
    }

    Lhd.prototype = {
        makeArray: function(arr, result)
        {
            var ret = result || [];

            Array.prototype.push.apply(ret, arr);

            return ret;
        },

        click: function()
        {
            console.log('click');

            return this;
        }
    };

    window.lhd = lhd;
})(window, document);

我能够返回一个数组但无法链接它。

1 个答案:

答案 0 :(得分:1)

  

我能够返回一个数组

您不能返回数组,必须使新实例(this)变为数组。

function lhd(selector) {
    return new Lhd(selector);
}

function Lhd(selector) {
    var elems = document.querySelectorAll(selector);

    this.length = 0; // initialise a length
    Array.prototype.push.apply(this, elems); // push onto the instance

    // don't `return` anything - it's a constructor
}

Lhd.prototype.click = function() {
    console.log('click');
    return this;
};

您现在可以像lhd('a').click().click()一样使用它。