2016-04-22 4 views
0

Я новичок в JavaScript, и после прочтения «JavaScript Хорошие детали» я хотел закодировать что-то для удовольствия. Я stubled на этот код отрезала, что я не могу понять:Действительно ли функции, определенные в этом объекте 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. В моем понимании «действия» - это объект, а «говорят», «слияние», «ошибка» и «[fetch-weather»] - это функции, сохраненные как значения без ключа.

Как можно определить функцию без зарезервированного слова «функция»?

Я также не могу понять «часть [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

Вы должны закрыть это как дубликат, не отвечая на него. –

0

Я также не могу понять «[„выборки всепогодный“]» - часть.

Я полагаю, это было сделано, потому что они используют функцию - в имени функции.

actions.fetch-weather(..); является незаконным, потому что - является оператором.

С другой стороны, с номером actions['name'] вы можете использовать любое имя.

+0

Спасибо, я понимаю, что вы должны использовать кавычки при использовании «-» в имени, но зачем использовать скобки? –

+0

«Зачем использовать скобки?» -> Чтобы использовать иначе нелегальные имена ... а также использовать вычисленные имена, например, вы можете легко написать новый язык скрипта, используя эту функциональность. И извините за то, что мой комментарий для вас был недостаточно ясен, @FrancescoPezzella объяснил это более ясно. – dabyte

0

Как можно определить функцию без зарезервированного слова «функция»?

Вы можете найти answer here

Я также не могу понять "[ 'выборки всепогодный']" - часть.

Этот синтаксис был введен 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) { 
    ... 
}; 
+0

Спасибо Франческо, теперь я могу это понять. –

 Смежные вопросы

  • Нет связанных вопросов^_^