【发布时间】:2017-05-02 18:21:45
【问题描述】:
ES6 引入了shorthand notation 来初始化具有函数和属性的对象。
// ES6 shorthand notation
const obj1 = {
a(b) {
console.log("ES6: obj1");
}
};
// ES5
var obj2 = {
a: function a(b) {
console.log("ES5: obj2");
}
};
obj2.a();
obj1.a();
new obj2.a();
new obj1.a();
但是,如您所见,这些不同的符号表现不同。如果我在浏览器(经过测试的 Chrome 和 Firefox)中执行new obj1.a(),我会得到TypeError: obj1.a is not a constructor。 new obj2.a() 行为完全正常。
这里发生了什么?有没有人有解释和/或文档/规范的链接?
【问题讨论】:
-
方法(在类或对象字面量中使用方法定义)和箭头函数不能与
new一起使用。为此,您必须使用老式的function或class构造函数。 -
在 ES6 之前,函数和构造函数都混在一起了。 ES6 试图区分它们。
标签: javascript methods ecmascript-6 shorthand