对象字面量语法扩展
- 属性初始值简写:
let name="xiaohong";
let age=12;
let person={
name, //相当于name=name
age //age=age
}
- 方法简写
let person={
sayName(){
return "xiaohong"; //省略了: function
}
}
- 可计算属性名
var suffix="ming"
let person={
["xiao"+surrix]:"叫我小明"
}
- 重复的对象属性
let person={
age:12,
age:14 //取最后一个
}
新增的方法
- Object.is():接受两个参数,类型相同且有相同的值则返回true。和全等类似,以下为区别
Object.is(NaN,NaN); //true
Object.is(+0,-0); //false
- Object.assign():浅复制,,扩展的mixin,不能复制对象上的原型和访问器属性。遇到访问器属性时会自动变成数据属性。接受一个接收对象和任意数量的源对象,返回接收对象。如果多个源对象具体同名属性,则返回靠后的。
枚举属性顺序
Object.getOwnPropertyNames()和Relect.ownKeys返回的属性有顺序:数字在前,字符串在后。数字按升序排,字符串按添加顺序排.symbol键也按加入顺序排。但是for-in\Object.keys()\Json.stringify()的顺序依然不明晰。
增强原型对象
- 新增Object.setPrototypeof()方法。从此可以为实例单独指定原型对象,让一个对象继承另一个对象。(以前实例创建了就不能更改原型对象。并且只能一个类型继承另一个类型)
- super关键字:只能在简写方法中使用。寻找[[HomeObject]],获取该对象的原型,并绑定this。
正式的方法定义
每个方法都有[[HomeObject]],表示容纳这个方法的对象。