此JavaScript对象中定义的值是否实际起作用?

时间:2016-04-22 10:02:55

标签: javascript wit.ai

我是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']” - 部分。

3 个答案:

答案 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) {
    ...
};