Анонимные функции внутри объекта - PullRequest
0 голосов
/ 25 октября 2018

У меня есть такой фрагмент Javascript:

var a = {ac: 10, function(){console.log("hi")}}

Браузер не выдает ошибку для этого.Так что это может быть действительным.

Но когда я использую

var a = {ac: 10, function hi(){console.log("hi")}}

Браузер выдает ошибку:

Uncaught SyntaxError: Неожиданный идентификатор

Может кто-нибудь сказатьмне, как я могу использовать первый код в любом сценарии в Javascript

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Вы можете попробовать структурировать это так:

var obj = {
    ac: 10,
    hello: function(){
        console.log("Goodbye");
    }
}
console.log(obj.ac);
console.log(obj.hello());
0 голосов
/ 25 октября 2018

Здесь происходит то, что ES6 позволяет вам использовать сокращенный синтаксис для определений функций.Это: const obj = { method() {} } в основном переводится как const obj = { method: function() {} }.

Итак, когда вы используете этот фрагмент var a = {ac: 10, function(){console.log("hi")}}, вы говорите браузеру, что function не является зарезервированным словом для вас внутри этого объекта,скорее имя свойства, которое вы хотите использовать, так что вы получите объект, который имеет метод с именем function.

Кстати, вы должны избегать этого в будущем, не используйтезарезервированные ключевые слова для другой цели.

Во втором фрагменте var a = {ac: 10, function hi(){console.log("hi")}} происходит то, что вы пытаетесь получить объявление функции (function hi(){console.log("hi")}) внутри объекта, и это синтаксическая ошибка.Присвоив функции имя, вы изменили сокращенный синтаксис для объявлений методов внутри объекта на определение функции.Если вы используете правильное наименование (избегая зарезервированных слов) для этого сокращенного синтаксиса или объявляете функцию снаружи и ссылаетесь на нее внутри объекта, у вас не должно возникнуть проблем.

0 голосов
/ 25 октября 2018

То, что вы делаете в первом примере, называется shorthand method names и представляет собой более новый способ инициализации функций в объектах js.Что на самом деле происходит в вашем примере, так это то, что имя ключа объекта (и имя функции) принимает значение function.Но «функцию» можно заменить любой клавишей / именем.Например:

var a = {
  ac: 10,
  other() { console.log('inside other') }
}

Подробнее о различных способах инициализации объекта можно прочитать здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer


Причина, по которой ваш второй пример не работает, заключается просто в том, что онневерный синтаксисЕсли вы удалите слово function из вашего второго примера, оно будет работать так, как я думаю, вы изначально ожидали.

...