Object是個什麼鬼

引言

老人常說,在js中,一切皆對象,那對象又是什麼涅,最經常使用的咱們都知道,對象有方法和屬性。由一些鍵值對構成的集合,而後隨便用個大括號括起來就造成了一個對象。看起來蠻簡單的,可是真是這麼簡單麼,當咱們新建一個對象,爲何會‘天生’帶有 hasOwnPropertytoString 這些方法呢?html

追溯

這其實與JS的繼承機制有關,JS中對象是經過原型繼承的,實例對象都默默帶着一個__proto__屬性,這個屬性默認指向實例對象的原型對象,當訪問實例對象沒有的屬性或者方法時,js引擎會順着__proto__查找原型對象是否有該屬性或者方法。簡單說,就是每一個兒子背後都有個強大的粑粑,當兒子想買東東而本身沒能力的時候,就會找粑粑‘啃老’,這就是爲啥全部的對象都會有 toString這些方法,真相只有一個,他們有個‘富’粑粑或者耶耶。函數

原型

沒錯,就是Object.prototype了,爲啥不是Object涅,敲黑板,Object是構造函數啊童靴們,不信能夠在控制檯打一下看看。那麼問題又來了,Object.prototype有什麼用,都有哪些方法呢。學習

  1. hasOwnProperty() 檢查是否存在一個給定名字的自有屬性
  2. valueOf() 返回一個對象的值表達
  3. toString() 返回一個對象的字符串表達

js屬性特性:

  • 屬性的特性其實就是值當前的屬性是否能夠寫能夠讀等等。即外部對象對於屬性操做的權限。

當前的js通常的屬性都是有4中屬性。分別是:數值屬性value,可讀屬性writable,可枚舉屬性enumerable,和可配置屬性configurable。可是因爲對象中存在一類特別的屬性存取器屬性,因此對於存取器屬性的值其實是有點不一樣的,他有本身的特別的屬性特性包括,讀取(get),寫入(set),可枚舉和可配置。爲了實現這一對象屬性的描述,js中定義了一個屬性描述符對象。而且能夠經過Object.getOwnPropertyDescriptor()方法來獲取某個對象中的特定屬性的描述符。固然當前函數只能獲取對象自有屬性的描述,若是要獲取繼承屬性的描述符的話,須要使用Object.getPrototypeOf();prototype

參考

相關文章
相關標籤/搜索