2016-04-22 2 views
0

私はJavaScriptを初めて使いました。「JavaScript The Good Parts」を読んだ後、私は何かを楽しいものにしたいと思っていました。このJavaScriptオブジェクトで定義されている値は実際に機能していますか?

const actions = { 
    say(sessionId, context, message, cb) { 
    console.log(message); 
    cb(); 
    }, 
    merge(sessionId, context, entities, message, cb) { 
    // Retrieve the location entity and store it into a context field 
    const loc = firstEntityValue(entities, 'location'); 
    if (loc) { 
     context.loc = loc; 
    } 
    cb(context); 
    }, 
    error(sessionId, context, error) { 
    console.log(error.message); 
    }, 
    ['fetch-weather'](sessionId, context, cb) { 
    // Here should go the api call, e.g.: 
    // context.forecast = apiCall(context.loc) 
    context.forecast = 'sunny'; 
    cb(context); 
    }, 
}; 

それはwit.aiのNode.jsクライアントから切り取られます。このコードは、私が理解できないことを切り取ら時に私がstubled。私の理解では、 "アクション"はオブジェクトであり、 "say"、 "merge"、 "error"、 "[fetch-weather]"はキーなしで値として保存される関数です。

"function"という予約語なしに関数を定義する方法はありますか?

私は "['fetch-weather']"部分も理解できません。

+1

それはES6 https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Operators/Object_initializer – jcubic

+0

に短縮表記ですはい、それが最初に見つからないのは残念です。 「 - 」 –

答えて

0

これは新機能、shorthand method names、ES6です。それは私も「[ 『-天候を取得する』]」理解することはできません

const a = { 
    say: function say(sessionId, context, message, cb) { 
     console.log(message); 
     cb(); 
    } 
} 
+0

あなたは、私が使用しているときに引用符を使用する必要があることunderstad、それを –

0

と同じである - 一部。

function-nameに-が使用されていると考えられます。

-がオペレータであるため、だから、actions.fetch-weather(..);違法です。

一方、actions['name'] -notationでは、任意の名前を使用できます。

+0

おかげで答えていない、重複としてこれを終了しなければならない名前で、なぜ括弧を使うのか? –

+0

"角かっこはなぜ使用しますか?" - >不正な名前を使用するために、また計算された名前を使用するために、この機能を使用して新しいスクリプト言語を簡単に書くことができます。 申し訳ありませんが、私のコメントが十分にはっきりしていないため、@FrancescoPezzellaはそれをより明確に説明しました。 – dabyte

0

"function"という予約語なしに関数を定義するにはどうすればよいですか?一部 -

あなたはanswer here

私はまた、 "[ '-天候を取得する']" 理解することはできません見つけることができます。

この種の構文は、プロパティ名を動的に定義できるComputed Property Namesという機能でES6によって導入されました。 ES5で

あなたはオブジェクトリテラルに直接プロパティとしてfetch-weatherのような無効な識別子を宣言することはできません。

ES6:

const actions = { 
    ..., 
    ['fetch-weather'](sessionId, context, cb) { 
    }, 
    ... 
}; 

ES5:

var actions = { 
    // props here 
}; 

actions['fetch-weather'] = function(sessionId, context, cb) { 
    ... 
}; 
+0

Francescoさん、ありがとうございました。 –

関連する問題