2016-05-09 10 views
2

それは働いているが、私は()=>MeteorJS - 私のヘルパーで今の機能の違い()と()=>

updateCVId:()=> { 
    return this._id; //return undefined 
} 

を使用した場合、その後this._idがあるfunction()

updateCVId: function() { 
    return this._id; //return the real id 

} 

を使用しています未定義。

同じイベントのためにある:私は()=>を使用する場合

'click .foo': function(evt, tmp) { 
    console.log(this._id); //log the real id 
} 

'click .foo': (evt, tmp)=> { 
    console.log(this._id); //log undefined 
} 

誰かがデータを取得する方法を、教えてもらえますか?

ありがとうございます。

+0

矢印関数では、* this *は関数が作成された実行コンテキストの* this *として割り当てられます。関数の宣言や式では、それはコール(または* bind *)によって設定されている可能性があります。異なるオブジェクトです。 – RobG

+0

それでは、通常の関数でこれを取るので、矢印関数でデータを取得する方法は? –

+0

関数の宣言または式を使用してください(最初の例)。[* ES6の矢印関数は常にthisを閉じますか?*](http://stackoverflow.com/questions/35813344/do-es6-arrow-functions-常にクローズアップ)。 – RobG

答えて

4

矢印機能=>は、コンテキストthisをレキシカルスコープから自動的にバインドするように設計されています。あなたの状況でthisは、'strict mode'で実行されるため、未定義です。 )

1あなたは既に行ったように、通常の関数を使用します:

var actions = { 
    //... 
    updateCVId: function() { 
     return this._id; //return the real id 
    } 
    //... 
}; 

2)ES6速記関数表記を使用する:あなたができるあなたの問題を解決するために

var actions = { 
    //... 
    updateCVId() { 
     return this._id; //return the real id 
    } 
    //... 
}; 

function() {}=>の違いは、コンテキストがthisで、呼び出しがどのようにthisに影響するかです。

function() {} は、関数が呼び出される方法によって決まります。オブジェクトのメソッドとして呼び出す場合は、thisがオブジェクトそのものになります:actions.updateCVId()
私はそれをsoft linked thisと呼びます。

矢印の関数の場合=>thisは、関数が定義されている語彙スコープのthisに自動的にバインドされます。あなたの例では、それはundefinedです。'strict mode'のデフォルトの場合です。
矢印機能が後で呼び出されても、thisundefinedとなります。
私はそれをhard linked thisと呼びます。

thisキーワードの詳細はthis articleです。

関連する問題