擴充套件物件的功能性(四)
這一節大大加強了,我對於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繫結並且呼叫相應的方法