对于以下赋值形式我们已近非常熟悉
var x = 2, y = 3 var o = { x: x, y: y }但是对于x: x这种写法还是太麻烦了,在ES6中如果你需要定义一个与某个词法标识符同名的属性的话,可以直接简写为x,如下。
var x = 2, y = 3 var o = { x, y }与上面的赋值思路类似,为了表达方便,关联到对象上的函数也有简洁的形式。
老方法:
var o = { x: function() {}, y: function() {} }ES6中:
var o = { x() {}, y() {} }可能遇见过下面这种情况的代码,其中的一个或多个属性名来自于某个表达式,因此无法用对象字面量表达。
var prefix = "user_" var o = { baz: function(...){..} } o[ prefix + "foo" ]: function(..){..} o[ prefix + "bar" ]: function(..){..} ..ES6对对象字面定义新增了一个语法,用来支持指定一个要计算的表达式,其结果作为属性名。如下:
var prefix = "user_" var o = { baz: function(..){..}, [ prefix + "foo" ]: function(..){..}, [ prefix + "bar" ]: function(..){..}, .. }同理方法名和生成器名都可以使用上面的方法进行计算。
在ES6中,要为已经存在的对象设定[[Prototype]],可以使用ES6工具Object.setPrototypeOf()。
var o1 = {...} var o2 = {...} Object.setPrototypeOf( o2, o1 ) // 旧写法 var o1 = {...} var o2 = { __proto__: o1, ... }通常把super看作只与类相关。但是,鉴于JavaScript的原型类而非类对象的本质,super对于普通(plain)对象的简洁方法也一样有效,特性也基本相同。
var o1 = { foo() { console.log( "o1: foo" ) } } var o2 = { foo() { super.foo() console.log( "o2: foo" ) } } Object.setPrototypeOf( o2, o1 ) o2.foo() // o1: foo // o2: foo