Array.prototype中的新函数无权访问此函数

时间:2018-08-20 16:01:07

标签: javascript arrays prototype

目前,我正在学习狂潮中进行一些前端工作面试。我确实遇到了很多问题,但目前我陷入了一个根本不难的问题,但由于某种原因,我无法使其正常工作。也许你们可以看看:

问题:向数组原型添加打印功能,该功能可打印数组中的所有内容。例如[1,2] .print()-> 1,2

我自信地编写了此函数,知道它会起作用,但没有成功

Array.prototype.print = () => {
 let str = ''
 for(let i = 0; i < this.length; i++) {
     this[i+1] === undefined ? str += this[i] : str += `${this[i]}, `
 }
 return str
}
console.log([1,2].print())

当我运行函数时,我没有得到任何回报。我的想法是this应该与我在[1,2]上工作的数组绑定在一起,但事实并非如此。它绑在窗户上。

知道我做错了什么吗?帮助将不胜感激。

最好, 阿亚兹

2 个答案:

答案 0 :(得分:1)

使用箭头函数会将外部作用域绑定到this,而不是在Array.prototype的上下文中

Array.prototype.print = function(){
  let str = '';
  let i = 0;
  let size = this.length;

  if(size === 1){
    return this[0];
  }

  for(; i < size; i++){
    str += this[i];
    
    if(size - 1 !== i){
      str += ',';
    }    
  }

  return str;
}

console.log([1].print())
console.log([1,2].print())
console.log([1,2,3].print())

答案 1 :(得分:1)

箭头功能没有为this获得其自身的值。代替:

() => {

写:

function() {