我收到错误:
Uncaught TypeError: Cannot read property '1' of undefined
运行以下内容时:
function Polygon(width, height) {
this.width = width;
this.height = height;
this.a = [1, 2, 3, 4, 5];
this.build = function() {
this.a.map(function(i, v) {
console.log(this.a[v])
});
}
}
var square = new Polygon(300, 300);
square.build();
只有在尝试引用this.a
和Array.prototype.map
等数组函数中的reduce
变量时才会出现这种情况。但是,代码在将变量存储在局部变量中时起作用,如下所示:
function Polygon(width, height) {
this.width = width;
this.height = height;
this.a = [1, 2, 3, 4, 5];
this.build = function() {
var b = this.a;
b.map(function(i, v){
console.log(b[v])
});
}
}
var square = new Polygon(300,300);
square.build();
我的问题是:
答案 0 :(得分:5)
根据Array.prototype.map
的{{3}}:
如果提供了
thisArg
参数进行映射,则会在调用时将其传递给回调,以用作此值。 否则,将传递undefined值以用作此值。(强调添加)
这意味着this
函数中的map
未定义,因此您尝试在undefined
上使用括号表示法。这会产生TypeError
,表示您正在尝试访问undefined
的属性。
您也错误地使用了i
。 i
是实际的元素或项,而不是索引。您只需记录i
,不要记下a
:
function Polygon(width, height){
this.width = width;
this.height = height;
this.a = [1, 2, 3, 4, 5];
this.build = function(){
this.a.map(function(i, v){
console.log(i);
}, this);
}
}
var square = new Polygon(300, 300);
square.build();
这会将可选的thisArg
作为Polygon
的上下文传递并正确记录。该参数明确指出this
上下文,允许访问this.a
。