“ this”关键字在此方法中指的是什么

时间:2019-04-10 05:02:54

标签: javascript

对于在这种情况下如何使用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()

1 个答案:

答案 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}`);