2016-10-06 2 views
0

ES6矢印関数およびキーの言葉「これ」

const func = (() => { 
 
    
 
    const init = (data) => { 
 
    organizeData(data); 
 
    return this; 
 
    } 
 
    
 
    const otherFunc =() => { 
 
    //Do something else 
 
    } 
 

 
    return { 
 
    init:init, 
 
    otherFunc: otherFunc 
 
    } 
 

 
})(); 
 

 
func.init(data).otherFunc()

私は「この」私のinit関数に問題があります。それは私のfuncオブジェクトの代わりにウィンドウを参照します。

それは代わりに私のFUNCの窓に矢印機能がthisのコンテキストを割り当てます

+0

これは通常の動作です。あなたの質問は何ですか? – Claies

+0

私のinit関数で 'this'キーワードが必要なのは、私のオブジェクトであり、ウィンドウではないということです。 –

+0

そして、矢印機能を使用しないでください。 –

答えて

0

事前に

感謝を指しているので.otherFuncは()関数ではありませんfunc.init(データ)を返しますそれが実行されたときではないと定義されていたのと同じ文脈に。

これは、例の最初の行がグローバルスコープで定義されているため、thisをグローバル名前空間にバインドすることを意味します。

実行時に関数を動的にバインドする場合は、() => {}ではなく古いのバージョンを使用する必要があります。

よく知られているように、既知のコンテキスト内にいるときだけ、矢印機能を使用することです。

+0

es5関数を使用する以外は別の方法はありませんか? –

+0

@ NizarAYARI:矢印関数は、非常に特殊なユースケースを解決します。関数宣言/式を完全に置き換えるものではありません。 –

+1

@ NizarAYARI関数宣言のように、ES5と矢印関数はES6です。通常の機能は言語の重要な部分であり続けますが、必要のないところで矢印機能を使用しないでください。実際には、関数の宣言は現在のものより簡単で短くなります。 – Bergi

関連する問題