一、代码
Array.prototype.myMap = function (fn) {
const res = []
const arr = this
return arr.reduce((pre, cur, i, arr) => {
pre.push(fn.call(this, cur, i, arr))
return pre
}, res)
}
这里有个问题,reduce
是不会处理空的数组元素的,map
是会处理的(不会执行函数,只是留相应位置为空元素)
二、各数组方法处理空元素
map
:不执行函数,但留相应位置为空元素filter
:不执行函数,不保留位置reduce
:不执行函数
三、this指向
因为这些数组方法的处理函数都是window
全局对象调用执行的,因此:
- 普通函数:指向
window
- 箭头函数:指向处理函数定义时的父级作用域