我遇到了一个我无法理解的问题。因此,我创建了一个包含几个功能的新功能。这是我的代码:
(() => {
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时-我没有收到此错误。
我知道两个函数都相同,但是我想确保它不基于函数主体。
谢谢您的时间!
现在,.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
方法应用相同的逻辑)