在这段简化的代码中,我将一个包含两个属性的对象传递给函数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
(作为数组)。
为什么会这样?第一个代码段出了什么问题?
答案 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
});