2017-11-01 10 views
1

初めてNode.jsに関数を宣言するためにthisのようなものがあります。要するに 、上記のコードは、プログラムが角括弧で囲まれた関数宣言はNode.js/Javascriptでどのように機能しますか?

Performing action one 
Performing action two 
Performing action three 

を出力します。この

'use strict'; 
const Actions = { 
    ONE: 'one', 
    TWO: 'two', 
    THREE: 'three' 
}; 
class FunMap { 

    run(action) { 
    const map = this; 
    map[action](); 
    } 

    [Actions.ONE]() { 
    console.log("Performing action one"); 
    } 

    [Actions.TWO]() { 
    console.log("Performing action two"); 
    } 

    [Actions.THREE]() { 
    console.log("Performing action three"); 
    } 

} 

var funMap = new FunMap(); 
funMap.run('one'); 
funMap.run('two'); 
funMap.run('three'); 

に似ているのNode.js/JavaScriptで関数宣言のこのタイプのための技術的な名前はありますか?

この行は、FunMapオブジェクトのプロパティ関数に、これらのすべて(文字列定数の角括弧を使用して宣言された関数)をどのように配置しますか?

const map = this; 

いjavascriptのクラスの角括弧表記[]はクラス自体を参照しますか?

答えて

4

クラス内の角括弧の構文は、computed property nameと呼ばれます。角括弧内の式が評価され、結果の文字列の値がキーとして使用されます。

角括弧内のコードは、の前に評価されているため、クラス宣言の前にと評価されています。 - 名前でプロパティを検索する

class FunMap { 

    run(action) { 
    const map = this; 
    map[action](); 
    } 

    one() { 
    console.log("Performing action one"); 
    } 

    two() { 
    console.log("Performing action two"); 
    } 

    three() { 
    console.log("Performing action three"); 
    } 

} 

run機能が異なる方法で角括弧を使用しています。

あなたの例

は、次のようになりますクラスを作成します。ライン const map = thisは特別何もしません - 関数は次のように同じことをするだろう:

run(action) { 
    return this[action](); 
} 

this[action]は「thisactionと呼ばれるプロパティを取得」を意味します。その値は、引数なしの関数として呼び出されます。

計算されたプロパティ名がES2015に追加されました。名前でオブジェクトを取得するための添字構文は、JavaScriptの初めからJavaScriptの一部です。

+0

[]内に文字列定数以外を置くことはできますか?私の最後の質問に対する答えはNOですか? javascriptクラスの角括弧表記[]はクラス自体を参照していますか? –

+0

ブラケットに式を入れることができます( '[" f "+ 1](){}')、答えはいいえ - 角括弧内のコードは、クラスが定義される前に実行されます。 – joews

+0

括弧内の式は文字列を返す必要がありますか? –

関連する問題