1. 程式人生 > >擴充套件物件的功能性(四)

擴充套件物件的功能性(四)

         這一節大大加強了,我對於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繫結並且呼叫相應的方法