2017-10-23 6 views
0

私は方法を連鎖しようとするのをやっていて、私の例ではうまくいきませんでした。矢印関数を使用してメソッド連鎖を実現する方法はありますか?

var object = { 
 
    method1:() => { 
 
    console.log('method1'); 
 
    }, 
 
    method2:() => { 
 
    console.log('method2'); 
 
    } 
 
}; 
 

 
object.method1(); // works fine 
 
object.method2(); // works fine 
 

 
object.method1().method2(); // merp

私は上記の起こっている状況は、デフォルトでwindowコンテキストが設定されており、第2の方法は、トリガしようとしたときであるので、矢印の機能は、独自のthisコンテキストを持っていない知っている、それはwindowオブジェクトでmethod2を見つけようとしています(何が起こっているのか間違った解釈であれば私を修正してください)。in order to achieve method chaining you have to return this自然に、これは問題です。

私は単純な解決方法は上記の矢印機能の代わりにfunction()を使用するのが簡単だと知っていますが、矢印機能を使ってメソッド連鎖を実現する方法があるのか​​、これは簡単ではありませんか?私が読んだ

関連質問:Arrow function vs function declaration/expressions: Are they equivalent/exchangeable?

+2

それがすでに宣言されているとして、あなたは 'object'を返すことができます(this''として機能するように) –

+0

あなたが連鎖機能に必要がある場合は、意志「これ」を返さなければならない。また、*私は矢印関数がこれを持っていないことを知っている* ???矢印関数は親コンテキストを関数にバインドします。 – Rajesh

+0

@ibrahimmahrir興味深いことに私は実際にそれをするとは思わなかった。あなたはそれを答えとして掲示するべきです:しかし、はい、それは私のシナリオに対する非常に具体的な答えです。あなたがそれを避けたい理由があると思います。メソッド連鎖が必要な場合は、 'function()'を使う必要があるというコンセンサスですか? – aug

答えて

0

はあなたがうまく動作method1の最初の引数としてobjectを渡すことができますように。しかし、あまりいいことではありません。この場合のみ、この場合の

var object = { 
 
    method1: (a: object) => { 
 
    console.log('method1'); 
 
    return a; 
 
    }, 
 
    method2:() => { 
 
    console.log('method2'); 
 
    } 
 
}; 
 

 

 
object.method1(object).method2(); // merp

+0

これを「有効な」ソリューションとして受け入れる – aug

関連する問題