为什么JS map()返回TypeError?

时间:2018-06-28 16:01:19

标签: javascript function

在这段简化的代码中,我将一个包含两个属性的对象传递给函数normalize

function normalize() {  
  console.log(this.coords.map(n => n / this.length));  
}

normalize({coords: [0, 2, 3], length: 5});

// OUTPUT: Uncaught TypeError: Cannot read property 'map' of undefined

它引发TypeError。

另一方面,通过 not 在调用函数中传递对象,它起作用了:

    function normalize() {  
      console.log(obj.coords.map(n => n / obj.length));  
    }

    obj = {
        coords: [0, 2, 3],
        length: 5
    }

    normalize();
    // OUTPUT: [0, 0.4, 0.6]

每个MDN map()需要一个调用数组才能正确执行,并且在两个示例中似乎都正确地传递了coords(作为数组)。

为什么会这样?第一个代码段出了什么问题?

1 个答案:

答案 0 :(得分:2)

由于将数据作为参数传递,因此您想使用参数而不是使用InputStream

所以this变成this.coords,而obj.coords变成this.length

obj.length

如果要使用此函数,则必须将函数设为这样的原型,然后才不会将项目作为参数传递(通常不建议制作这样的原型):

function normalize(obj) {
  console.log(obj.coords.map(n => n / obj.length));
}

normalize({
  coords: [0, 2, 3],
  length: 5
});