我如何 return Array 的原型函数中的数组对象?

How can I return the array object from Array's prototype function?

我有一个编程练习来创建数组的两个原型,它们都是函数。我把我的代码放在下面。一个将调用另一个,如最后一行所示。我试图让第二个函数修改只需调用第一个函数就可以返回的值。对于下面的代码,我希望输出为 [4,6,4000],我改为在推送后获取数组的长度,即在本例中为 3。

Array.prototype.toTwenty = function() 
{
    return [4,6];
};
Array.prototype.search = function (lb)
{

    if(lb >2)
    {
        //This doesn't work
        return this.push(4000);
    }
};

var man = [];
console.log(man.toTwenty().search(6));

//console.log returns 3, I need it to return [4,6,4000]

我的搜索让我找到 arguments.callee.caller 但我没有尝试,因为它已被弃用,我无法使用它。

有人可以帮助我吗?我试图阅读原型继承、链接和级联,但似乎无法提取答案。感谢您的帮助

Array.prototype.push

上引用 MDN

The push() method adds one or more elements to the end of an array and returns the new length of the array.

所以,this.push(4000) 实际上压入了值,但是当您 return 计算 push 的结果时,您得到的是数组的当前长度 3.


相反,您应该 return 数组对象本身,像这样

Array.prototype.toTwenty = function () {
    return [4, 6];
};

Array.prototype.search = function (lb) {
    if (lb > 2) {
        this.push(4000);            // Don't return here
    }
    return this;                    // Return the array object itself.
};

console.log([].toTwenty().search(6));
// [ 4, 6, 4000 ]

这是我的做法,

<script>
    Array.prototype.toTwenty = function() {
        return [4, 6];
    };
    Array.prototype.search = function(lb) {

        if (lb > 2) {

            return this.push(4000);
        }
    };

    var man = [];
    man = man.toTwenty();
    man.search(8);
    console.log(man);
</script>

Here is a demo