object.defineproperty, 什么是object.defineproperty()?不知道小伙伴們今天來看看邊肖的分享吧!
一、Object.defineProperty()的定義:
Object.defineProperty()將直接在對象上定義新的屬性,或者修改對象的現(xiàn)有屬性并返回該對象。
第二,和的區(qū)別。運(yùn)算符或[]運(yùn)算符:
Object.defineProperty()可以更深入地定義一個(gè)對象。它不僅可以操縱屬性的值,還可以修改屬性的一些屬性,比如是否可以修改。當(dāng)然,值也是屬性之一。
三、Object.defineProperty(obj,prop,descriptor)接受3個(gè)參數(shù):
要操作的對象。
屬性:要操作的屬性。
Descriptor: Descriptor object. It contains six attributes: configurable, enumerable, writable, value, acquisition and setting.
注意:
此方法應(yīng)直接在對象構(gòu)造函數(shù)對象上調(diào)用,而不是在對象類型的任何實(shí)例上調(diào)用。
四、屬性類型:
1.數(shù)據(jù)屬性
數(shù)據(jù)屬性包含數(shù)據(jù)值的位置。在這個(gè)位置可以讀寫值。
數(shù)據(jù)屬性有四個(gè)描述其行為的特征:
可配置:是否可以通過delete刪除屬性,是否可以修改attribute屬性(注意是屬性),是否可以修改為accessor屬性。默認(rèn)值為true。
可枚舉:該屬性是否可以被for-in遍歷,默認(rèn)為true。
可寫:屬性值是否可以修改,默認(rèn)為真。
值:該屬性的數(shù)據(jù)值。讀取屬性值時(shí),從這里讀?。粚懭雽傩灾禃r(shí),將新值保存在此位置。默認(rèn)值是未定義的。
例如:
let person={}
Person.name //Add a data attribute to people, which is configurable, enumerable and writable. It is true by default.
The value is undefinedperson.name=a//value property is set to a.
如果將configurable設(shè)置為false,則除了value和writable之外,其他屬性都不能修改(而且它本身也不能更改為true)。如果修改被忽略,嚴(yán)格模式將給出一個(gè)錯(cuò)誤。
當(dāng)configurable為false時(shí),writeable為true,并且可以修改為false。如果writeable為false,對true的修改也將被忽略,并且嚴(yán)格模式將給出一個(gè)錯(cuò)誤。
Object.defineProperty(person,name,{ configurable:false })對象。定義屬性(人員,姓名,{ value:b })控制臺(tái)。日志(人。名稱)//b可配置為假的,
person.name=c //errorObject.defineProperty(person, name, { writable: true}) //error
2.訪問者屬性
訪問器屬性不包含數(shù)據(jù)值,但包含一對getter和setter函數(shù)(它們不需要同時(shí)存在)。訪問器屬性必須通過Object.defineProperty定義。訪問器屬性具有以下四個(gè)特征:
可配置:屬性是否可以通過刪除刪除,屬性特征(注意是特征)是否可以修改,是否可以修改為數(shù)據(jù)屬性。默認(rèn)值為true。
可枚舉:該屬性是否可以被for-in遍歷,默認(rèn)為true。
Get:讀取屬性時(shí)調(diào)用的函數(shù)。默認(rèn)值是未定義的
Set:寫入屬性時(shí)調(diào)用的函數(shù)。默認(rèn)值是未定義的。
五、數(shù)據(jù)屬性和訪問器屬性的轉(zhuǎn)換:
數(shù)據(jù)屬性-訪問者屬性
將get或Set屬性設(shè)置為data屬性,value和可寫屬性將被丟棄,該屬性將成為訪問器屬性。
訪問者屬性-數(shù)據(jù)屬性
將value或writable屬性設(shè)置為accessor屬性,get和Set屬性將被丟棄,該屬性將成為數(shù)據(jù)屬性。
注意:只有當(dāng)configurable為true時(shí),您才能相互轉(zhuǎn)換,即使當(dāng)數(shù)據(jù)屬性中的configurable為false時(shí),您可以修改value或writable。
不能通過僅設(shè)置值或可寫來更改數(shù)據(jù)屬性的訪問器屬性。
object.defineproperty,以上就是本文為您收集整理的object.defineproperty最新內(nèi)容,希望能幫到您!更多相關(guān)內(nèi)容歡迎關(guān)注。