Array.prototype.map = function(callback, thisArg) {
if (this == null) {
throw new TypeError("this is null or not defined");
}
if (Object.prototype.toString.call(callback) != "[object Function]") {
throw new TypeError(callback + " is not a function");
}
// 将O赋值为调用map方法的数组. 防止callback方法中修改原数组.
var originArr = Object(this);
// 将len赋值为数组O的长度. 如果length未定义就取0.
var len = originArr.length >>> 0;
var copyArg;
if (thisArg) {
copyArg = thisArg;
}
var result = new Array(len);
var k = 0;
while(k < len) {
var kValue, mappedValue;
// 遍历O,k为原数组索引
if (k in originArr) {
// kValue为索引k对应的值.
kValue = originArr[k];
// 执行callback,this指向copyArg.
// originArr.map((kValue, k, originArr) => {});
mappedValue = callback.call(copyArg, kValue, k, originArr);
// 返回值添加到新数组A中.
result[k] = mappedValue;
}
k++;
}
return result;
};
网友评论