我在这里阅读了一个片段
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}
。
答案 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);
}