如果没有“function”关键字,这个对象方法定义如何工作?

Posted

技术标签:

【中文标题】如果没有“function”关键字,这个对象方法定义如何工作?【英文标题】:How does this object method definition work without the "function" keyword? 【发布时间】:2015-11-30 23:59:15 【问题描述】:

我不小心遗漏了function 关键字发现了这一点。通常,下面模块中的foobar 方法将被声明为foobar: function(arg1),但有趣的是,至少在某些浏览器中,以下工作有效,例如Chrome 版本 44.0.2403.157 m,但在 IE 11.0.9600.17959 中失败

这怎么可能在任何浏览器中运行?这是某种新的 ES6 功能吗?

var module = 
    foobar(arg1) 
        alert(arg1);
    
;

module.foobar("Hello World");

【问题讨论】:

【参考方案1】:

这怎么可能在任何浏览器中运行?是某种新的 ES6 功能吗?

Yes.

...

方法定义

对象的属性也可以引用函数、getter 或 设置方法。

var o = 
  property: function ([parameters]) ,
  get property() ,
  set property(value) ,
;

在 ECMAScript 6 中,可以使用简写符号,因此 不再需要关键字“function”。

// Shorthand method names (ES6)
var o = 
  property([parameters]) ,
  get property() ,
  set property(value) ,
  * generator() 
;

...

【讨论】:

如您所见,在第一种情况下,new o.preperty() 行为正常。使用速记方法名称,new o.property() 会引发错误。见here【参考方案2】:

ES6 允许 "concise methods",正如您所发现的,它还不能跨浏览器兼容。

【讨论】:

以上是关于如果没有“function”关键字,这个对象方法定义如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

代码学习PHP面向对象之抽象类与接口

用一段代码去了解函数的结构

PHP基础入门

java面向对象(上)--构造方法与this关键字

js 对象类型 (对象的属性 ,对象的方法) this 关键字

javascript中对象访问自身属性的方式