數據屬性和訪問器屬性
數據屬性 | 訪問器屬性 | |
---|---|---|
共同特性 | [[enumerable]] | |
[[configurable]] | ||
特有特性 | [[writable]] | [[get]] |
[[value]] | [[set]] | |
設置單個屬性方法 | Object.defineProperty(obj, prop, descriptor) | |
設置多個屬性方法 | Object.defineProperties(obj, props) | |
讀取單個屬性描述符 | Object.getOwnPropertyDescriptor(obj, prop) | |
讀取對象所有屬性描述符 | Object.getOwnPropertyDescriptors(obj) | |
備注 | obj: 需要被操作的目標對象; prop: 目標對象需要定義(讀取)或修改的屬性的名稱; descriptor: 將被定義或修改的屬性的描述符; props: 該對象的一個或多個鍵值對定義了將要為對象添加或修改的屬性的具體配置; |
特性詳情
[[Configurable]]:
表示能否通過delete刪除屬性從而重新定義屬性,( 設置為false,表示不能從對象中刪除屬性(在嚴格模式下調用delete會報錯)),能否修改屬性的特性,能否把數據屬性修改為訪問器屬性(或相反), 從true修改為false是單向的,即一旦把把屬性定義為不可配置的,就不能再把它變回可配置了( 此時只能單向修改writable從true到false)。
[[Enumerable]]: 表示能否通過for-in循環返回屬性
[[Writable]]: 表示能否修改屬性的值
[[Value]] : 包含這個屬性的數據值
[[Get]]: 讀取屬性時調用的函數,默認值為undefined
[[Set]]: 寫入屬性時調用的函數,默認值為undefined
對象常用的內部屬性
[[Prototype]]——對象的原型(將在下面詳細介紹)
[[Class]]——字符串對象的一種表示(例如,Object Array ,Function Object,Function等);用來區分對象
可以用Object.prototype.toString()方法可以間接得到內部屬性[[Class]]的值,該方法應該返回下列字符串: "[object " + [[Class]] + "]" 。 比如
var getClass = Object.prototype.toString; getClass.call({}); // [object Object] getClass.call([]); // [object Array] getClass.call(new Number(1)); // [object Number]
[[Get]]——獲得屬性值的方法
[[Put]]——設置屬性值的方法
[[CanPut]]——檢查屬性是否可寫
[[HasProperty]]——檢查對象是否已經擁有該屬性
[[Delete]]——從對象刪除該屬性
[[DefaultValue]]返回對象對於的原始值(調用valueOf方法,某些對象可能會拋出TypeError異常)。
電腦刺綉綉花廠 http://www.szhdn.com 廣州品牌設計公司https://www.houdianzi.com
prototype 屬性可以為對象添加方法;
擁有 construct 屬性的對象可以通過 new 操作符來調用,此時該對象可以被理解為類;
擁有call 屬性的對象可以通過函數名稱來調用,JavaScript中一切皆對象,所有的函數(對象)都擁有此屬性。
2.對象的創建、訪問和釋放
(1)創建對象
在JavaScript中,使用 new 關鍵字調用構造函數來創建對象。
var 對象名 = new 構造函數();
(2)對象的屬性
對象的屬性都通過 “.”運算符訪問。
如果訪問值是 null對象的屬性,將出現空引用錯誤。與普通變量函數相同,對象的屬性可以動態生成。將某個屬性值設置為null表示刪除該屬性。
在函數內部的對象,函數執行完畢后將自動釋放所占用的資源;
在函數外部定義的對象,將其值設置為null后,垃圾收集器將釋放其占用的資源。
3.常用內置對象
常用的內置對象包括Global,Object,Function,Array,String,Date,RegExp,Math,Error等等。
(1)Global對象: js中頂級對象,一切聲明的變量和函數都是它的屬性。
特性:
1. 沒有 construct 屬性,所以無法使用 new 操作符構造。
2. 沒有 call 屬性,所以無法調用
3. 只是表示全局對象的概念,依據宿主不同而不同,例如,在瀏覽器中,window對象即為Global對象。
(2)Object對象:所有對象的基礎,其他所有對象都從Object 對象擴展而來,這一切都通過原型實現。原型是對象的一個屬性,即 prototype。prototype 本身是一個對象,每個對象都具有此屬性。js中每個對象本身都不包含具體的屬性(但可以動態添加),而是通過原型進行屬性的共享。當獲取一個對象的屬性時,系統首先檢測對象是否直接包含該屬性,如果不包含則從原型屬性中查找;如果扔為找到則返回 undefined。
所有對象都派生自 Object,所以使用原型為 Object對象擴展屬性時,所有對象都具有該屬性。
(3)Function 對象: 函數也是對象(js中一切皆對象),所以當使用function關鍵字定義函數時,實際上是在系統內部創建了一個Function對象。
具體使用參見:JavaScript 基礎回顧——函數
(4)Error對象: 內置的Error對象可以在發生錯誤時作為參數傳遞給catch子句,也可以使用 new 關鍵字構造自定義的Error對象。