2017-04-17 13 views
2

{birth: 2000}が接続されているためbirth属性は、変更されませんなぜ私はここに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 

をスニペットを読ん

+4

矢印機能です。矢印関数の 'this'は、常に' this'をその外側で参照します。 –

+0

var fn =(y)=> y - this.birth; // this.birthはまだ1990年です return fn.call({birth:2000}、年);なぜ???? –

答えて

0

アロー機能(=>)(この)独自のコンテキストを持っていけません。

だからどちらかが正常な機能が必要です。

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); 
} 
関連する問題