2015-12-30 10 views
7

は、ここに私のコードです:「this」がES6の矢印機能で機能しないのはなぜですか?

'use strict'; 

let obj = { 
    username : 'Hans Gruber', 
    hello:() => 'hello, ' + this.username 
}; 
console.log(obj.hello()); 

しかし、出力は次のようになります。hello, undefined

出力がhello, Hans Gruberであると予想します。

私は矢印機能でthisを理解していないと思いますか?誰が私に明確な外見を与えることができますか?

+0

それはないその質問のdoublicateのようなものです。これはオブジェクトスコープに関するものです – CoderPi

+0

私は矢印関数で 'this'がどのように動作するのかを学ぶことなく、どのようにして矢印関数について知ることができるのか、まだ困惑しています。 –

+0

また、新しい質問をする前に検索を使用してください。 –

答えて

7

矢印関数は、関数が作成されたときに作成されたクロージャーにthisのバインディングを保存します。したがって、関数の呼び出しのコンテキストにはthisは設定されません。あなたのケースでは

thisはあなたがオブジェクトを作成したときwindowに結合するので、this.usernamewindow.username、ないobj.usernameですました。 documentationから

:(また脂肪矢印機能として知られている)

矢印関数式は、関数式に比べて短い構文を持っており、は字句this

1

矢印をバインド関数は、それが定義されたレキシカルスコープを保持します。したがって、hello関数のthisは、その関数が定義されているときはthisと同じであり、プロパティであるオブジェクトではありません。それはあなたが望むものを、本質的にES5の

function() { 
    return 'hello, ' + this.username; 
}.bind(this); 

の省略形であること

let obj = { 
    username: 'Hans Gruber', 
    hello() {return `hello, ${this.username}`;} 
}; 
関連する問題