关于JavaScript的Call函数的问题?

时间:2017-04-17 08:35:32

标签: javascript

我在这里阅读了一个片段

var obj = {
    birth: 1990,
    getAge: function (year) {
        var b = this.birth; // 1990
        var fn = (y) => y - this.birth; // this.birth is still 1990
        return fn.call({birth:2000}, year);
    }
};
obj.getAge(2015); // 25

为什么birth属性未更改,因为已插入{birth: 2000}

1 个答案:

答案 0 :(得分:0)

箭头函数(=>)没有自己的上下文(this);

所以你需要一个正常的功能:

var obj = {
birth: 1990,
getAge: function (year) {
    var b = this.birth; // 1990
    var fn = function(y){ return  y - this.birth; }// this.birth is still 2000
    return fn.call({birth:2000}, year);
}
};
obj.getAge(2015); // 25

或者你放弃了这个不必要的功能,只需这样做:

getAge:function(year){
 return year-this.birth>=0?year-this.birth:(console.error("not born yet"),0);
}