四 扩展对象的功能性

124 阅读1分钟

对象字面量语法扩展

  1. 属性初始值简写:
let name="xiaohong";
let age=12;
let person={
    name,  //相当于name=name
    age //age=age
}
  1. 方法简写
let person={
    sayName(){
        return "xiaohong"; //省略了: function
    }
}
  1. 可计算属性名
var suffix="ming"
let person={
    ["xiao"+surrix]:"叫我小明"
}
  1. 重复的对象属性
let person={
    age:12,
    age:14  //取最后一个
}

新增的方法

  1. Object.is():接受两个参数,类型相同且有相同的值则返回true。和全等类似,以下为区别
Object.is(NaN,NaN); //true
Object.is(+0,-0); //false
  1. Object.assign():浅复制,,扩展的mixin,不能复制对象上的原型和访问器属性。遇到访问器属性时会自动变成数据属性。接受一个接收对象和任意数量的源对象,返回接收对象。如果多个源对象具体同名属性,则返回靠后的。

枚举属性顺序

Object.getOwnPropertyNames()和Relect.ownKeys返回的属性有顺序:数字在前,字符串在后。数字按升序排,字符串按添加顺序排.symbol键也按加入顺序排。但是for-in\Object.keys()\Json.stringify()的顺序依然不明晰。

增强原型对象

  1. 新增Object.setPrototypeof()方法。从此可以为实例单独指定原型对象,让一个对象继承另一个对象。(以前实例创建了就不能更改原型对象。并且只能一个类型继承另一个类型)
  2. super关键字:只能在简写方法中使用。寻找[[HomeObject]],获取该对象的原型,并绑定this。

正式的方法定义

每个方法都有[[HomeObject]],表示容纳这个方法的对象。