扩展对象的功能性(四)

         这一节大大加强了,我对于js的理解。还有新的知识点,Object.is和Object.assign() 方法的用处,还有super关键字。以前以为只有类的继承才能用到super关键字。

// 扩展对象的功能性
        

          // 对象的类别
         // 1. 普通对象   具有javascript对象所有的默认内部行为
         // 2. 特异对象   具有某些与默认行为不符的内部行为
         // 3. 标准对象   ECMAScript6 规范中定义的对象,例如 Array、Date等。标准对象既可以是普通对象,
         //               也可以是特异对象
         // 4. 内建对象   脚本开始执行时存在与javascript执行环境中的对象,所有标准对象都是内建对象


        // Object.is() 方法,如果两个参数类型相同,且具有相同的值 则返回true
        // Object.assign() 方法,接受任意数量的源对象,并按指定的顺序将属性复制到接收对象中。如果有同名的属性,则排位靠后的源对象会覆盖排位考前的对象
        
        /* es6的自有属性的枚举顺序
            1. 所有数字键按升序排序
            2. 所有字符串键按照他们被加入对象的顺序排序
            3. 所有symbol键按照他们被加入对象的顺序排序
        */
        
        // 简化原型的super 关键字
        // 只能在简写方法的对象中使用super 才有效
        // super的引用不是动态变化的,它总是指向正确的对象

        /*let person = {
            getGreeting: function() {
                return super;
            }
        }
        console.log(person.getGreeting()); // 出错*/


        //正式的方法定义
        // 在es6中正式将方法定义为一个函数,它会有一个内部的[[HomeObject]] 属性来容纳这个方法从属的对象

        /*let person = {
            // 是方法  getGreeting函数的[[HomeObject]]是 person
            getGreeting() {
                return 'hello';
            }
        }*/
        // 不是方法
        // function getGreeting(){
        //     return 'hello';
        // }

        // -->super 的所有引用都是通过[[HomeObject]]属性来确定后续的运行过程。第一步是在[[HomeObject]] 属性上调用 Object.getPrototypeOf()方法来检索原型的引用;然后搜索原型找到同名函数;最后将this绑定并且调用相应的方法

猜你喜欢

转载自blog.csdn.net/qq_39081958/article/details/83147195