2017-09-26 16 views
0

JavaScriptコードを試してみました。なぜES6の構文が失敗するのか分かりません。ArrowシンタックスVS ES5関数スコープ

String.prototype.spacify = function() { 
 
    console.log(this.split('').join(' ')); 
 
} 
 

 
'hello world'.spacify();

^^これは素晴らしい作品! しかし、私はこれを行う

String.prototype.spacify =() => { 
 
    console.log(this.split('').join(' ')); 
 
} 
 

 
'hello world'.spacify();

私は機能を矢印に機能を変換すると、私はthis.splitが定義されていません取得します。理解できませんでした。矢印構文はスコープとは何か特別なことをしていますか?

啓発してください!

+0

がthis' https://derickbailey.com/2015/09/28/do 'にかかる外側のコンテキストを取ります-es6-arrow-functions-really-solve-this-javascript/ – mplungjan

答えて

0

矢印の機能では、スコープは変更されません。

意味:

const globalThis = this; 

String.prototype.spacify =() => { 
    // this === globalThis 
    ... 
} 
+0

これはあまり正しくありません。スコープと 'this'は関連していますが、同じではありません。もちろん、矢印関数は他の関数と同様に独自のスコープを持ちます。 –

+0

@FelixKling面白い、もう少し詳しく説明できますか? –

2

arrow functionthisのコンテキストは、外側thisを指します。ここでは、testのは、矢印機能のthisと同じです。

矢印機能は、それ自身のコンテキストを作成していない、それだけで、Googleは多くの明らか

function test() { 


    String.prototype.spacify =() => { 
     console.log(this.split('').join(' ')); 
    } 

} 
関連する問題