对于在这种情况下如何使用this
关键字,我有些困惑。它将其放置在带有参数回调的匿名函数中,然后按以下方式使用:callback(this[i], i, this)
。该练习没有深入,但我了解到this
指的是__proto__中的ar
对象。为什么将3个参数放在匿名函数的参数callback(this[i],i,this)
中,它如何在后台运行?任何见解将不胜感激,谢谢。
仅需补充前面所说的内容,该练习就要求我实现自己的Array.prototype.map
版本。
Array.prototype.map = function(callback) {
let arr = [];
for(let i = 0; i < this.length; i++){
arr.push(callback(this[i], i , this))
}
return arr;
}
let ar = new Array()
答案 0 :(得分:5)
将在map
实例上调用Array
函数,因此在以下代码行中:
for(let i = 0; i < this.length; i++){
arr.push(callback(this[i], i , this))
}
是根据传递给Array.prototype.map
方法的回调函数的签名进行的:
回调函数,该函数生成新Array的元素,采用 三个参数:
currentValue 数组中正在处理的当前元素。
索引可选正在处理的当前元素的索引。 数组。
array 可选调用了数组映射。
因此,要细分您的代码段callback
函数中的三个参数:
this[i]
转换为map
回调的第一个参数,即 currentValue 。如您所正确理解的,this
是在其上调用map
的数组实例。因此this[i]
将引用数组第i th 索引中的值
i
是索引或当前索引。这是发送到callback
的for循环迭代的第i 索引。
this
是对 array 自身的引用,在其上调用map
。
const arr = [1, 2, 3];
const callback = function(currentElement, index, array){
console.log(`The current element ${currentElement}`);
console.log(`The current index ${index}`);
console.log(`The array instance ${array}`);
return currentElement * 2; //multiplies each element with 2, this is the mapping operation
}
const mappedArray = arr.map(callback);
console.log(`The mapped array ${mappedArray}`);