在add
myObj
的{{1}}方法中,如何在地图中获取this
?换句话说,this
包装到地图时,指向地图内的anonymous
函数。我怎样才能获得this
?
注意:解决方法如创建新变量
temp_sum
和添加 和返回不是首选。因为,我可能需要使用 this 关键字在其中进行一些测试。
var myObj = {
sum : 0,
toAdd : [2,3,4],
add : function(){
this.toAdd.map(function(num){
this.sum += num //<-- How to get this.sum from here
})
return this.sum;
}
};
var m = Object.create(myObj);
var _sum = m.add();
document.getElementById("test").innerHTML = _sum;
答案 0 :(得分:2)
您可以使用bind
var myObj = {
sum : 0,
toAdd : [2,3,4],
add : function(){
this.toAdd.map(function(num, index){
this.sum += num;
}.bind(this))
return this.sum;
}
};
或reduce
var myObj = {
sum : 0,
toAdd : [2,3,4],
add : function(){
this.sum = this.toAdd.reduce(function(a,b){
return a + b;
});
return this.sum;
}
};
或for
循环
var myObj = {
sum : 0,
toAdd : [2,3,4],
add : function(){
for (var i=0; i<this.toAdd.length; i++) {
this.sum += this.toAdd[i];
}
return this.sum;
}
};
答案 1 :(得分:1)
Array.prototype.map
方法接受可选参数:要用作this
的对象值。所以你的代码将变得如此简单:
add: function () {
this.toAdd.map(function (num) {
this.sum += num;
}, this);
return this.sum;
}