You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
letperson={say(){console.log('person');}};letdog={say(){console.log('dog');}};letfriend=Object.create(person);console.log(friend.say());// personObject.setPrototypeOf(friend,dog);console.log(friend.say());// dog
在es6中通过多种方式来加强对象的使用,通过简单的语法扩展,来提供更多操作对象及与对象交互的方法。
字面量语法扩展
当对象属性名和变量名相同时,赋值的时候可以省略变量名:
对象方法定义的简写。省略
function
关键字和冒号:在es5中,如果想要通过计算得到属性名,只能通过对象加方括号的方式在定义变量属性,不能用点:
在es6中,允许在对象字面量时用方括号来定义可计算的属性,扩展内允许任意的js表达式:
新增对象方法
利用
Object.is
判断两个值是否全相等:该方法基本和全等
===
相同,但是判断正负0和NaN
有所区别:利用
Object.assign
合并对象:该方法会合并后面的对象到第一个对象,重复的属性值以最后一个对象为准。该方法为浅拷贝,如果属性值为对象,拷贝的是对象的引用。
增量对象的原型
利用
Object.setPrototype()
方法修改对象的原型:利用
super
调用原型对象方法:上面friend对象的原型设置为person,在friend的say方法中利用
super.say
调用了person的say方法。但是输出的结果却不是'person'。这是利用super
调用原型方法的时候,会把方法的this
对象指向super
调用环境的this
对象。上面代码相当于:The text was updated successfully, but these errors were encountered: