摘要:原型對象對象的原型對象實質上是對象的構造函數的原型對象。構造函數所有的對象都是通過構造函數實例化出來的。即一個對象,如果沿著原型鏈找下去,最終都會找到構造函數原型對象相互之間糾纏不休,你中有我,我中有你。
JS中的對象
JS中對象(若無特殊說明,本文中的對象都為對象實例,即使是空對象實例)可謂是一個核心的概念,縱觀整個JS的數據結構如String、Number、Array、Boolean等,都有其對應的對象。細細數來,感覺上就是JS里一切數據皆對象(除了純數字、null和undefined外,其他數據都可以訪問到__proto__屬性)。本文將淺析一下JS中的對象及相關概念。
對象的屬性JS中的對象本質上就是一個若干個無序的鍵值對組成的集合。每個鍵值對就是對象的屬性或方法。而對象中的每個屬性都對應著有屬性描述符,屬性描述符分為數據描述符和存儲描述符。屬性描述符又包含了以下幾個屬性。
數據描述符和存取描述符均具有以下可選鍵值:
configurable
當且僅當該屬性的 configurable 為 true 時,該屬性描述符才能夠被改變,也能夠被刪除。默認為 false。
enumerable
當且僅當該屬性的 enumerable 為 true 時,該屬性才能夠出現在對象的枚舉屬性中。默認為 false。
數據描述符同時具有以下可選鍵值:value
該屬性對應的值??梢允侨魏斡行У?JavaScript 值(數值,對象,函數等)。默認為 undefined。
writable
當且僅當該屬性的 writable 為 true 時,該屬性才能被賦值運算符改變。默認為 false。
存取描述符同時具有以下可選鍵值:get
一個給屬性提供 getter 的方法,如果沒有 getter 則為 undefined。該方法返回值被用作屬性值。默認為 >undefined。
set
一個給屬性提供 setter 的方法,如果沒有 setter 則為 undefined。該方法將接受唯一參數,并將該參數的新值>分配給該屬性。默認為 undefined。
對象的屬性和方法中有幾個特殊的存在:
constructor
該屬性指向對象的構造函數
__proto__(非標準,不推薦使用)
該屬性指向對象的構造函數的原型對象,因為對象沒有prototype屬性,所以通過該屬性指向它。此屬性為訪問器屬性,不推薦使用。若需要獲取對象的原型對象可以用Object.getPrototypeOf(obj)來獲取。
通過對象訪問的屬性和方法除了來自對象自身定義的以外,還有從其原型鏈上繼承的屬性和方法。
原型對象對象的原型對象實質上是對象的構造函數的原型對象??梢杂?b>Object.setPrototypeOf(obj,prototype)改變對象的原型對象。
訪問對象的原型對象有兩種方法,一是通過內置屬性 __proto__訪問,二是通過Object方法Object.getPrototypeOf(obj)訪問。兩種方法都有其局限性,第一種方法不是ES標準所支持的,雖然ES6已經支持了。因為__proto__屬性時訪問器屬性,所以可以修改對象的原型對象(這樣很影響性能)。第二種方法在IE瀏覽器中的支持情況是IE9+。總體上講,推薦第二種方法去訪問對象的原型對象。如果想要替換原型對象,則可用 Object.setPrototypeOf(obj,prototype)重新設置其原型對象。
所有的對象都是通過構造函數實例化出來的。Object也不例外。
對象的構造函數恒等于實例出該對象的構造函數的原型對象的constructor屬性指向的函數。即
var obj = new A(); obj.constructor===A.prototype.constructor
一個對象,如果沿著原型鏈找下去,最終都會找到Object構造函數、原型對象相互之間糾纏不休,你中有我,我中有你。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/81191.html
摘要:每一個對象直接量都是的子類,即構造函數中的構造函數與普通函數并沒有什么兩樣,只不過在調用時,前面加上了關鍵字,就當成是構造函數了。由于沒有傳入變量,在調用的構造函數時,會出錯這個問題可以通過一個空對象來解決改自。 showImg(https://segmentfault.com/img/bVmNZj); 對于 OO 語言,有一句話叫Everything is object,雖然 Ja...
摘要:在中,由于垃圾回收是自動進行的,所以人們在編碼時可能不太會注意這方面。時,引擎統一對所有這些狀態的對象進行回收。,表示釋放該對象后能得到的內存大小。 在 JavaScript 中,由于垃圾回收是自動進行的,所以人們在編碼時可能不太會注意這方面。但事實是,一些 webapp 在使用一段時間后,會出現卡頓的現象,特別是那些單頁應用,包括 WebView 方式的手機 app 。這個現象在傳統...
摘要:關于中的坑大家都踩過。那這里的和是嚴格相等的。這里介紹的是通過創建對象時的。提示一下,數組對象的函數本身就是有這個功能的,也就是說可以達到要求。事件有兩種記法,一個是也是類似,那么在中出現的表示觸發該事件的元素,也就是。 TL;DR: this 指向調用該方法的對象,只有函數執行時,this 才有定義。 關于 JavaScript 中 this 的坑大家都踩過。像本文開頭的這句話,道理...
閱讀 1371·2023-04-25 16:45
閱讀 1917·2021-11-17 09:33
閱讀 2306·2021-09-27 14:04
閱讀 915·2019-08-30 15:44
閱讀 2633·2019-08-30 14:24
閱讀 3411·2019-08-30 13:59
閱讀 1691·2019-08-29 17:00
閱讀 887·2019-08-29 15:33