创建更新对象字段的函数的正确方法是什么?下面的方式似乎没有发生:
function adjmatrix(neighbors){
this.neighbors = neighbors
this.sum = 0
}
adjmatrix.prototype.update = function(){
this.neighbors.forEach(function(a){a.sum += 10})
}
var myMatrix = new adjmatrix([1,2,3])
myMatrix.update()
print(myMatrix.sum) //Expect a value of 30, I get 0.
Javascript的新功能,所以我对范围和内容的工作方式不太清楚。谢谢你的帮助。我正在命令行中通过d8
运行我的编程。
答案 0 :(得分:2)
为了更新对象的“sum”属性,您的“update”方法应如下所示:
adjmatrix.prototype.update = function(){
var matrix = this;
this.neighbors.forEach(function(a){matrix.sum += 10})
}
如果你想总结“邻居”值,它看起来像这样:
adjmatrix.prototype.update = function(){
var matrix = this;
this.neighbors.forEach(function(a){ matrix.sum += a; })
}
.forEach()
调用传入数组的每个值,每次调用函数一次。
答案 1 :(得分:1)
您现在拥有的代码:
adjmatrix.prototype.update = function(){
this.neighbors.forEach(function(a){a.sum += 10})
}
尝试更新sum
数组的每个元素的neighbors
属性,这意味着它尝试更新数字的sum
属性< / em> 1
,2
和3
。由于他们没有sum
财产,因此无法工作。将您的代码更改为:
adjmatrix.prototype.update = function(){
var self = this;
this.neighbors.forEach(function(a){ self.sum += 10; })
}
答案 2 :(得分:1)
ES5 reduce 方法,以避免在每次循环调用中触及this.sum
adjmatrix.prototype.update = function(){
this.sum = this.neighbors.reduce(function(memo, current) {
return memo + current;
}, 0);
}