我是JavaScript的新手,在阅读“JavaScript The Good Parts”之后,我想编写一些有趣的东西。我发现这段代码发现我无法理解:
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客户端的剪辑。在我的理解中,“动作”是一个对象,“说”,“合并”,“错误”和“['fetch-weather']”是保存为没有键的值的函数。
如何在没有保留字“function”的情况下定义函数?
我也无法理解“['fetch-weather']” - 部分。
答案 0 :(得分:0)
这是ES6中的新功能shorthand method names。它与
相同const a = {
say: function say(sessionId, context, message, cb) {
console.log(message);
cb();
}
}
答案 1 :(得分:0)
我也无法理解“['fetch-weather']” - 部分。
我认为这样做是因为他们在函数名中使用了nil
。
所以-
非法,因为actions.fetch-weather(..);
是运营商。
另一方面,使用-
- 表示法,您可以使用任何名称。
答案 2 :(得分:0)
如何在没有保留字"功能"?
的情况下定义一个功能
您可以找到answer here
我也无法理解" [' fetch-weather']" -part。
ES6引入了一种名为Computed Property Names的功能,您可以在其中动态定义属性名称。
使用ES5,您无法直接在对象文字中声明像fetch-weather
这样的无效标识符。
ES6:
const actions = {
...,
['fetch-weather'](sessionId, context, cb) {
},
...
};
ES5:
var actions = {
// props here
};
actions['fetch-weather'] = function(sessionId, context, cb) {
...
};