4、扩展对象的功能性

第四章、扩展对象的功能性


1、对象字面量语法扩展
        当一个对象的属性与本地变量同名时,不必再写冒号和值,简单的只写属性名即可。
        
2、可计算属性名
        任何可用于对象实例括号记法[]的属性名,也可以作为字面量中的计算属性名。
        
3、新增方法
        1、Object.is():比较两个值是否相等,它是弥补===的不准确运算。
                两个特例:
                console.log(Object.is(+0,-0))            //false
                console.log(Object.is(NaN,NaN))        //true
                
                console.log(+0 === -0)                        //true
                console.log(NaN === NaN)                    //false

        2、Object.assign():对象复制(深复制),接受任意数量的源对象,并按指定的顺序将属性复制到接收对象中。
                如果多个源对象具有同名属性,则排位靠后的源对象会覆盖排位靠前的。
                注意:Object.assign()方法不能将提供者的访问器属性(get/set)复制到接收器对象中,而是将其转为接收对象的一个数据属性。
                各种第三方库都有实现同类方法,例如jQuery的extend()方法
                
        3、重复的对象字面量属性:
                es6中重复检查属性被移除,所以取最后一次赋值。例如:
                    let person = {
                            name: 'zhangsan',
                            name: 'lisi'
                    }
                    console.log(person.name);                //lisi
                    
        4、自有属性枚举顺序
                基本原则:
                    1、所有数字键按升序排序
                    2、所有字符串键按照他们被加入对象的顺序排序
                    3、所有symbol键按照他们被加入对象的顺序排序
                被影响到的方法:
                    Object.getOwnPropertyNames()
                    Object.assign()
                    Reflect.ownKeys
                    
4、增强对象原型
        1、改变对象的原型
                创建对象:构造函数、Object.create()
                正常情况,通过以上两种方法创建的对象,其原型实在对象被创建时指定的。
                Object.getPrototypeOf():返回任意指定对象的原型
                Object.setPrototypeOf():改变任意指定对象的原型
                对象原型的真实值被存储在内部专用属性[[Prototype]]中
                
        2、简化原型访问的Super引用
                Super引用相当于指向对象原型的指针,实际上就是Object.getPrototypeOf(this)的值
                Super引用在多重继承的情况下非常有用,使用Object.getPrototypeOf()会有问题
                Super引用不是动态变化的,它总是执行最初指定的那个原型
                
        3、正式的方法定义
                es6中正式将方法定义为一个函数,它会有一个内部的[[HomeObject]]属性来容纳这个方法从属的对象。例如:
                    let person = {
                            getGretting(){
                                    return "hello";
                            }
                    }
                这个概念对使用Super引用非常有用。
                Super的所有引用都通过[[HomeObject]]属性来确定后续的运行过程。
                    ①、在[[HomeObject]]属性上调用Object.getPrototypeOf()来检索原型的引用。
                    ②、搜索原型找到同名函数。
                    ③、设置this绑定并且调用相应的方法。

发布了247 篇原创文章 · 获赞 23 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/LiyangBai/article/details/102974390