对象内部的匿名函数

时间:2018-10-25 05:08:35

标签: javascript anonymous-function

我有一个如下的Javascript片段:

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

浏览器不会为此引发错误。因此可能是有效的。

但是当我使用

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

浏览器抛出错误:

  

未捕获的SyntaxError:意外的标识符

有人可以告诉我如何在Javascript中的任何情况下使用第一个代码

预先感谢

3 个答案:

答案 0 :(得分:7)

第一个示例中的操作称为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,它将像我最初所期望的那样工作。

答案 1 :(得分:4)

您可以尝试像这样构造它:

var obj = {
    ac: 10,
    hello: function(){
        console.log("Goodbye");
    }
}
console.log(obj.ac);
console.log(obj.hello());

答案 2 :(得分:3)

这里发生的是ES6允许您使用shorthand syntax进行函数定义。这是: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 declarationfunction hi(){console.log("hi")}),这是一个语法错误。通过给函数命名,可以从对象内部方法声明的简写语法更改为函数定义。如果对此速记语法使用适当的命名(避免使用保留词),或者在外部声明该函数并在对象内部引用该函数,则应该没有问题。