object,defineproperty()
一、Object.defineProperty()的定義:
Object.defineProperty()會直接在一個對象上定義一個新屬性,或者修改一個對象的現有屬性,並返回此對象。
二、和.操作符或者[]操作符的區別:
Object.defineProperty()能夠更深入地定義一個對象,它操作的不僅僅是屬性的值,也可以修改屬性的一些特性,比如是否可修改,是否可遍歷,當然值也是屬性其中的特性之一。
三、Object.defineProperty(obj, prop, descriptor)接受3個參數:
obj: 要操作的對象
prop: 要操作的屬性
descriptor: 描述符對象。包含6個屬性:configurable、enumerable、writable、value、get、set
注意:
應當直接在Object構造器對象上調用此方法,而不是在任意一個Object類型的實例上調用。
四、屬性類型:
1、數據屬性
數據屬性包含一個數據值的位置。在這個位置可以讀取和寫入值
數據屬性有4個描述其行為的特性:
configurable: 能否通過delete刪除屬性,能否修改屬性特性(注意是特性),能否修改為訪問器屬性,默認是true
enumerable: 能否通過for-in遍歷到該屬性,默認是true
writable: 能否修改屬性值,默認是true
value: 這個屬性的數據值。讀取屬性值的時候,從這裏讀取;寫入屬性值得時候,把新值保存在這個位置。默認是undefined
例如:
let person = {}
person.name // 給person添加一個數據屬性,Configurable、Enumerable、Writable默認是true,Value是undefinedperson.name = 'a' // Value特性被設置為'a'
如果將configurable設置為false 那麼除了value和writable之外的特性都不能被修改(本身也不能再改為true了),如果修改會被忽略,嚴格模式會報錯。
在configurable為false的情況下,writable為true可修改為false,如果writable為false,修改為true也會被忽略,嚴格模式報錯。
Object.defineProperty(person, 'name', { configurable: false})Object.defineProperty(person, 'name', { value: 'b'})console.log(person.name) // b configurable為false,writable為true時還能修改Object.defineProperty(person, 'name', { writable: false})
person.name = 'c' // errorObject.defineProperty(person, 'name', { writable: true}) // error
2、訪問器屬性
訪問器屬性不包含數據值,包含一對getter和setter函數(不需要同時存在)。
訪問器屬性必須通過Object.defineProperty定義。訪問器屬性有以下四個特性:
configurable: 能否通過delete刪除屬性,能否修改屬性特性(注意是特性),能否修改為數據屬性,默認是true
enumerable: 能否通過for-in遍歷到該屬性,默認是true
get: 在讀取屬性時調用的函數。默認值是undefined
set: 在寫入屬性時調用的函數。默認是undefined
五、數據屬性和訪問器屬性相互轉換:
數據屬性 -> 訪問器屬性
給數據屬性設置了get或set特性,value和writable特性就會被廢棄,該屬性變為訪問器屬性
訪問器屬性 -> 數據屬性
給訪問器屬性設置了value或writable特性,get和set特性就會被廢棄,該屬性變為數據屬性
注意:只有在configurable為true的情況下才可以相互轉換,即使數據屬性中在configurable為false的情況可以修改value或writable,訪問器屬性轉數據屬性只設置value或writable也不行。
-
手機怎麼剪愛奇藝裏的視頻
喜歡看影視劇的朋友想必對愛奇藝不會陌生,它裏面的影視劇資源很多。一些朋友也會選擇在愛奇藝上面下載視頻進行剪輯處理,那麼手機愛奇藝具體該怎麼剪輯視頻呢?第一種方法是用愛奇藝截取片段,找到並打開手機愛奇藝視頻,進入想要剪輯的愛奇藝視頻裏面,然後選擇視頻右端...
-
電腦啟動不起來是什麼原因
1、首先可能是電源出現問題導致啟動不起來,建議檢查電源。2、主機內部電路損壞,建議找專業人員維修。3、風扇的轉速以及平穩性不好,導致散熱不好,主機無法啟動。4、CUP損壞後也會出現此現象,CPU損壞無法通過自檢,計算機無法啟動。...
-
改圖片格式方法,如何更改圖片格式
1、找到想要更改格式的圖片。2、找到後,對着圖片右擊,找到“編輯”。3、打開“編輯”,找到左上角的“文件(F)”。4、點擊“文件”,再找到“另存為(A)...”。5、點擊“另存為(A)...”,找到“保存類型(T)”,右邊有一個箭頭。6、點擊箭頭,就會展出許多種圖片格式。7、選擇自己想...
-
手機相冊很多垃圾圖片
我們使用手機去瀏覽網頁,或者是刷微博以及微信的時候,都會加載一些網頁,而且有些圖片還會自動下載保存到手機相冊裏面,這就是為什麼我們的手機相冊總是會莫名的多出一些垃圾圖片的原因。如果我們的手機下載了非官網渠道的APP,這種APP軟件會出現無用圖片,會在相冊中保...
相關文章
- steam destination folder,must be empty應該怎麼辦
- 登陸CF彈出Client file corruptiondetect怎麼辦
- duplicate entry for key primary
- 開機顯示reboot and select,proper boot device
- kindle,paperwhite不轉格式看doc,pdf,txt等文件
- XP系統出現unable to find a,version of the rutime怎麼辦
- 開機時rebootandselectproperbootdevice應該怎麼辦?
- 電腦提示reboot and select,proper boot device如何解決
- bootdevicepriority是什麼意思
- indentationerror:expected an,indented block,應該怎麼辦?