用于更新对象字段的Javascript函数

时间:2014-06-26 15:56:55

标签: javascript

创建更新对象字段的函数的正确方法是什么?下面的方式似乎没有发生:

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运行我的编程。

3 个答案:

答案 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> 123。由于他们没有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);
}