上篇文章介紹了JS的對象,本文將介紹Object這個基類,主要介紹其屬性和方法(其實這些在MDN裏都有^_^,點擊這裏能夠直通MDN)。好了廢話很少說了,直接開始。文中的Object
多爲構造函數Object
數組
Object.prototype
prototype
屬性爲函數的專屬屬性,表示函數的原型對象。該屬性表示Object
對象的原型對象,此處的Objcet
爲構造函數Object
而不是對象實例。下圖能夠證實。函數
Object.prototype.__proto__
該屬性爲訪問器屬性,即爲有get和set函數的屬性,能夠直接賦值。如有對象實例obj則可直接訪問該屬性obj.__proto__
。spa
Object.getPrototypeOf(obj)
該方法得到對象實例obj的原型對象。得到的對象與對象的__proto__
屬性的值相同。prototype
Object.setPrototypeOf(obj, prototype)
該方法是將prototype對象設爲obj對象的原型對象。該方法是ES6的標準。code
prototypeObject.isPrototypeOf(obj)
該方法判斷prototypeObject
對象是否在obj
對象的原型鏈上。對象
關於各類數據類型的prototype屬性的展現
繼承
Object.prototype.constructor
該屬性指向建立該對象原型的構造函數。其返回爲一個具體的函數而不是引用或對象。ip
Object.defineProperty(obj,prop,desc)
、Object.defineProperties(obj, {prop1:desc1, prop2:desc2})
上面兩個方法都是給對象obj
添加或修改自身屬性,前者只能操做一個屬性,或者能夠操做多個屬性。其參數中prop爲屬性名,desc爲屬性描述符。兩個方法都返回改變後的對象obj。原型鏈
Object.getOwnPropertyNames(obj)
該方法得到對象obj的全部自身屬性的屬性名組成的數組(包括不可枚舉屬性)。數組中元素的排列順序未知(以我本身有限的幾個例子看,應該是按定義的前後順序排列)。字符串
Object.getOwnPropertyDescriptor(obj, prop)
、Object.getOwnPropertyDescriptors(obj)
兩個方法都是獲取對象obj的自身屬性的屬性描述符,前者只是取得某個屬性的描述符,後者獲取整個對象的全部自身屬性的描述符。
Object.entries(obj)
該方法返回對象自身屬性中全部可枚舉的屬性的鍵值對(屬性名:值)組成的數組。
Object.keys(obj)
該方法與上面的方法類似,也是遍歷對象中的可枚舉屬性,只是此方法返回的是對象中可枚舉的自身屬性的屬性名組成的數組。
Object.getOwnPropertySymblos(obj)
該方法會返回一個數組,該數組包含了指定對象自身的(非繼承的)全部 symbol 屬性鍵。(此方法爲ES6規範)
Object.prototype.propertyIsEnumerable(prop)
(obj.propertyIsEnumerable(prop)
)
判斷屬性prop
是不是對象obj
的可枚舉的自身屬性。
Object.prototype.hadsOwnProperty(prop)
(obj.hadsOwnProperty(prop)
)
判斷obj
對象是否含有prop
自身屬性。
Object.assign(target, ...sources)
該方法能夠把任意多個的源對象自身的可枚舉屬性拷貝給目標對象,而後返回目標對象。
Object.create(prototype, [ propertiesObject ])
該方法建立一個擁有指定原型和若干個指定屬性的對象。
Object.preventExtensions(obj)
、'Object.isExtensible(obj)'
對對象的可擴展狀態設置和判斷,對象默承認擴展。前者是讓obj
對象變得不可擴展。後者是判斷obj
對象是否可以擴展。
Object.seal(obj)
`Object.isSealed(obj)`
對對象的密封狀態的設置和判斷。前者讓obj
對象密封,後者判斷obj
對象是否被密封。密封對象是指那些不能添加新的屬性,不能刪除已有屬性,以及不能修改已有屬性的可枚舉性、可配置性、可寫性,但可能能夠修改已有屬性的值的對象。
Object.freeze(obj)
、Object.isFrozen(obj)
對對象的凍結狀態的設置和判斷,前者讓凍結obj對象,後者判斷對象obj是否被凍結。凍結指的是不能向這個對象添加新的屬性,不能修改其已有屬性的值,不能刪除已有屬性,以及不能修改該對象已有屬性的可枚舉性、可配置性、可寫性。也就是說,這個對象永遠是不可變的。該方法返回被凍結的對象。
Object.is(value1, value2)
該方法爲同值判斷,即判斷value1
和value2
是否爲同一個值,與===
號不一樣的是,該方法會將兩個NaN
判斷爲同一個值,而+0
和-0
爲不一樣的值。
Object.prototype.toLocalString()
、Object.prototype.toString()
返回一個表示該對象的字符串。toLocaleString()
方法主要用於被本地化相關對象覆蓋。覆蓋了該方法的對象有Array
、Number
、Date
。toString()
方法能夠用來檢測對象類型。其用法爲Object.prototype.toString.call(obj)
,其返回值的格式爲[object ObjectName]
。
Object.prototype.valueOf()
該方法返回對象的原始值。這個方法用的很少,大多數狀況下JS會自動調用此函數,另一些就是其餘對象重寫了此函數的狀況。
本人初學JS,內容基本上從MDN上搬過來的本身的理解不是不少,再加上初中做文湊不齊600字的語文水平(-_-|)……本文內容若有錯漏,望請指正,不勝感激!