2017-06-18 16 views
0

私は、コンストラクタ内の矢印関数について少し混乱しています。矢印関数はコンストラクタ内でどのように機能しますか?

私の知るところ通り:arrow機能を使用する場合、キーワードthisはその実際の機能にリバウンドしません。親スコープから継承されます。

のは例を見てみましょう:

var d = { 
    b: 'b', 
    x:() =>{ 
    console.log(this); // this will return Window Object. 
} 
} 
d.x(); 

それはWindowオブジェクトを印刷します。それは結構です。

しかし、この印刷オブジェクトc

function A(){ 
    this.b ='b'; 
    this.x =() =>{ 
    console.log(this); 
    } 
} 
var c = new A() 
c.x(); 

コンストラクタ関数インチ私によれば、Window Objectを返すはずです。どうして ?

+4

あなたの*レキシカルスコープ*はすでに 'A'です(そうでなければ、' this.x = ... 'が最初に機能しませんでした)。 – haim770

+0

これは面白いです:b = new A(); c = new A(); b.x = c.x; –

答えて

1

コンストラクタでは、thisは、構築中のオブジェクトを指します。他にあなたができるのはなぜですかthis.b ='b';

矢印機能は現在のコンテキストをキャプチャするだけなので、コンストラクタ内のオブジェクトをキャプチャします。

関連する問題