Javascript用于获取父方法的对象

时间:2015-04-04 17:17:38

标签: javascript javascript-objects

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;

2 个答案:

答案 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;
}