新创建的原型中的中间值

问题描述 投票:0回答:1

我遇到了一个我无法理解的问题。因此,我创建了一个包含几个功能的新功能。这是我的代码:

(() => {
    function BetterArray(array) {
        this.array = array;
    }

    BetterArray.prototype.map = function (fn) {
        return Array.prototype.map.call(this.array, fn);
    };

    BetterArray.prototype.collect = function (fn) {
        return Array.prototype.map.call(this.array, fn);
    };

    const a = new BetterArray([1])
        .map((item) => item * 2)
        .collect((item) => item * 2);

    console.log(a);
})();

在“收集”行中,出现错误未捕获的TypeError :(中间值).map(...)。collect不是函数。我很好奇为什么会出现此错误,以及如何正确编写此代码以避免这种错误。另一件事是,当我用collect更改map时-我没有收到此错误。

我知道两个函数都相同,但是我想确保它不基于函数主体。

谢谢您的时间!

javascript function prototypejs
1个回答
0
投票

现在,.map.collect方法返回普通数组,并且普通数组上没有.collect方法。

[在调用.map上的BetterArray时,如果您希望以后可以在其上调用BetterArray之类的BetterArray方法,则应创建并返回.collect的新实例:

(() => {
    function BetterArray(array) {
        this.array = array;
    }

    BetterArray.prototype.map = function (fn) {
        const arr = Array.prototype.map.call(this.array, fn);
        const newBetterArr = new BetterArray(arr);
        return newBetterArr;
    };

    BetterArray.prototype.collect = function (fn) {
        return Array.prototype.map.call(this.array, fn);
    };

    const a = new BetterArray([1])
        .map((item) => item * 2)
        .collect((item) => item * 2);

    console.log(a);
})();

((如果您也想使.collect产生BetterArray实例,则对.collect方法应用相同的逻辑)

© www.soinside.com 2019 - 2024. All rights reserved.