javascript在对象中命名函数

时间:2018-08-30 08:51:41

标签: javascript

我应该在这两者之间使用哪个,有没有一个比另一个有优势?

// 1st
{ ["test"]() { return 1; } }

// 2nd
{ "test": function () { return 1; } }

3 个答案:

答案 0 :(得分:5)

"test": function () { return 1; }是旧方法,而"test"() { return 1; }是新方法,省略了function关键字。

还请注意,这里的[]允许您将变量用作标识符

let name = "test1"
let a = {
  "test2": function () { return "you called test2" },
  "test3"() { return "you called test3" },
  
  
  [name]() { return "you called test1" },
  [name + "1"]() { return "you called " + name + "1" }
}

// written differently works the same
console.log( a.test2() ) // "you called test2" <-- the old way declared one
console.log( a.test3() ) // "you called test3" <-- new way declared one

// same call
console.log( a[name]() ) // "you called test1" <-- declared using
console.log( a.test1() ) // "you called test1" <-- [name]() {...}

// the [...] notation allow the build of identifier freely 
console.log( a.test11() ) // "you called test11"      <-- declared using
console.log( a[name + "1"]() ) // "you called test11" <-- [name + "1"]() {...}

由于Javascript像其他许多语言一样倾向于避免过时而导致旧程序无法继续工作,因此您会发现可以以多种方式完成一件事

答案 1 :(得分:1)

它允许使用变量属性名称:

let propName = "test"
console.log({ [propName]() { return 1 } }.test());

答案 2 :(得分:1)

优势:

  • 函数是正常声明的,因此具有名称。 (而 使用{name: function() { ... }}格式,您的所有功能 是匿名的,即使引用它们的属性具有 名称帮助工具。名称帮助工具可以帮助您在 调试器,告诉您哪些函数引发了异常。 (2015年 更新:最新的JavaScript规范ECMAScript第6版, 定义了JavaScript引擎必须推断出的多种方式 函数的名称。其中之一是将功能分配给 属性,如我们的{name: function() { ... }}示例中所示。这样 引擎实施ES6,这个原因将消失。)

  • 为您提供仅由您的个人使用的私有功能的自由 模块(例如我上面的internalSomething)。上没有其他代码 页面可以调用那些函数;他们是真正的私人。在return语句中,只有最后导出的内容可见
    在范围函数之外。

  • 根据环境轻松返回不同的功能, 如果实现只是完全改变(例如IE-vs-W3C 或SVG与Canvas等)。