對象標籤有三種:proto、class和extensible。前端
1、proto標籤app
例如我新建了一個person對象,那麼其__proto__則指向Person.prototype,而後Person.prototype的__proto__則指向Object.prototype,Object.prototype的__proto__則指向null,從而造成完整的原型鏈。學習
2、class標籤this
上圖的要點爲:prototype
1. Object.prototype.toString.call(o)則是至關於o.toString(),o做爲this傳入,跟apply的用法很像。3d
2.slice(8,-1)便是截出第8個字符到最後一個字符(不包括最後一個字符)的字符串,旨在截出[object Xxx]中的Xxx。對象
3.typeof new Number(1)返回object,可是使用toString返回的是Number,toString更爲精準一些。(typeof null返回object,而toString則返回null。)blog
3、extensible標籤原型鏈
上圖的要點爲:字符串
1.用isExtensible判斷是否可擴展屬性,用preventExtensions來阻止擴展,此時原對象屬性的屬性標籤不受影響。
2.用isSealed判斷是否被封印,用seal來封印對象,此時原對象的屬性標籤變成不可配置了。
3.用isFrozen判斷是否被凍結,用freeze來凍結對象,此時原對象的屬性標籤變成不可寫且不可配置了。
4.以上三種操做對屬性標籤的影響程度一步步地加深,可是對對象的操做不會影響其原型鏈(prototype chain)前端部分的狀況。
接下來咱們學習下對象序列化。
上圖的要點爲:
1.把對象變爲字符串的過程稱爲對象序列化,序列化後對象的key會加上雙引號,對象的花括號先後都會加上雙引號。
2.若對象屬性爲undefined,則序列化後屬性便去掉了。若屬性值爲NaN或Infinity(無窮),則序列化後屬性會變爲null。若屬性值爲Date對象,則序列化後會變爲UTC格式。
上圖的要點爲:對象內部加上toJSON方法,從而自定義序列化過程。
上圖的要點爲:
1.obj.toString()可直接輸出[object Object]字符串,至關於Object.prototype.toString.apply/call(obj)。
2.可在對象內部重寫toString和valueOf方法。
3.+obj首先會調用valueOf,看可否變成非對象,若不能,則調用toString,若仍不能轉成非對象,則報錯。