摘要:表示能否通過循環返回屬性表示能否修改屬性的值包含這個屬性的數據值讀取屬性時調用的函數,默認值為寫入屬性時調用的函數,默認值為其中直接在對象上定義的屬性,默認值均為通過方法或方法,如果不指定的值,則全部默認為。
數據屬性和訪問器屬性
數據屬性 | 訪問器屬性 | |
---|---|---|
共同特性 | [[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
其中直接在對象上定義的屬性,[[Configurable]], [[Enumerable]], [[Writable]]默認值均為true;定義屬性 定義單個屬性
通過Object.defineProperty()方法或Object.defineProperties()方法,如果不指定writale, enumerable, configurable 的值,則全部默認為 false。
Object.defineProperty(book, "actor", { value: "Nicholas" })定義多個屬性
var book = {} Object.defineProperties(book,{ _year:{ writable: true, value: 2004 }, edition:{ writable: true, value: 1 }, // year為訪問器屬性 year:{ get: function(){ return this._year; }, set: function(newValue){ if(newValue > 2004){ this._year = newValue; this.edition += newValue - 2004; } } } }); // {_year: 2004, edition: 1}讀取屬性的描述符 讀取單個屬性的描述符
Object.getOwnPropertyDescriptor(book, "_year"); // {value: 2006, writable: true, enumerable: false, configurable: false} Object.getOwnPropertyDescriptor(book, "edition"); // {value: 3, writable: true, enumerable: false, configurable: false} Object.getOwnPropertyDescriptor(book, "year"); // {get: ?, set: ?, enumerable: false, configurable: false} Object.getOwnPropertyDescriptor(book, "actor"); // {value: "Nicholas", writable: false, enumerable: false, configurable: false}讀取所有屬性的描述符
Object.getOwnPropertyDescriptors(book)注意
從上面代碼Object.getOwnPropertyDescriptor()執行結果中可以看出來,通過Object.defineProperty()方法或Object.defineProperties()方法,如果不指定數據屬性或訪問器屬性的writale, enumerable, configurable 的值,則全部默認為 false。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/108589.html
摘要:一般來講,函數執行完畢后,局部活動對象就會被銷毀,內存中僅保存全局作用域,但是閉包的情況有所不同理解閉包的前提先理解另外兩個內容作用域鏈垃圾回收作用域鏈當代碼在執行過程中,會創建變量對象的一個作用域鏈。 閉包是javascript語言的一個難點,也是它的特色,很多高級應用都要依靠閉包來實現。個人的理解是:函數中嵌套函數。 閉包的定義及其優缺點 閉包是指有權訪問另一個函數作用域中的變量的...
摘要:所以,有另一種說法認為閉包是由函數和與其相關的引用環境組合而成的實體。所以本文中將以維基百科中的定義為準即在計算機科學中,閉包,又稱詞法閉包或函數閉包,是引用了自由變量的函數。 閉包(closure)是JavaScript中一個神秘的概念,許多人都對它難以理解,我也一直處于似懂非懂的狀態,前幾天深入了解了一下執行環境以及作用域鏈,可戳查看詳情,而閉包與作用域及作用域鏈的關系密不可分,所...
閱讀 2054·2019-08-30 15:52
閱讀 2446·2019-08-29 18:37
閱讀 799·2019-08-29 12:33
閱讀 2846·2019-08-29 11:04
閱讀 1536·2019-08-27 10:57
閱讀 2101·2019-08-26 13:38
閱讀 2768·2019-08-26 12:25
閱讀 2455·2019-08-26 12:23