...">
瀏覽量:132次
object.defineproperty()是什么呢?不知道的小伙伴來看看陽泰小編今天的分享吧!
一、Object.defineProperty()的定義:
Object.defineProperty()會(huì)直接在一個(gè)對(duì)象上定義一個(gè)新屬性,或者修改一個(gè)對(duì)象的現(xiàn)有屬性,并返回此對(duì)象。
二、和.操作符或者[]操作符的區(qū)別:
Object.defineProperty()能夠更深入地定義一個(gè)對(duì)象,它操作的不僅僅是屬性的值,也可以修改屬性的一些特性,比如是否可修改,是否可遍歷,當(dāng)然值也是屬性其中的特性之一。
三、Object.defineProperty(obj, prop, descriptor)接受3個(gè)參數(shù):
obj: 要操作的對(duì)象
prop: 要操作的屬性
descriptor: 描述符對(duì)象。包含6個(gè)屬性:configurable、enumerable、writable、value、get、set
注意:
應(yīng)當(dāng)直接在Object構(gòu)造器對(duì)象上調(diào)用此方法,而不是在任意一個(gè)Object類型的實(shí)例上調(diào)用。
四、屬性類型:
1、數(shù)據(jù)屬性
數(shù)據(jù)屬性包含一個(gè)數(shù)據(jù)值的位置。在這個(gè)位置可以讀取和寫入值
數(shù)據(jù)屬性有4個(gè)描述其行為的特性:
configurable: 能否通過delete刪除屬性,能否修改屬性特性(注意是特性),能否修改為訪問器屬性,默認(rèn)是true
enumerable: 能否通過for-in遍歷到該屬性,默認(rèn)是true
writable: 能否修改屬性值,默認(rèn)是true
value: 這個(gè)屬性的數(shù)據(jù)值。讀取屬性值的時(shí)候,從這里讀??;寫入屬性值得時(shí)候,把新值保存在這個(gè)位置。默認(rèn)是undefined
例如:
let person = {}
person.name // 給person添加一個(gè)數(shù)據(jù)屬性,Configurable、Enumerable、Writable默認(rèn)是true,Value是undefinedperson.name = 'a' // Value特性被設(shè)置為'a'
如果將configurable設(shè)置為false 那么除了value和writable之外的特性都不能被修改(本身也不能再改為true了),如果修改會(huì)被忽略,嚴(yán)格模式會(huì)報(bào)錯(cuò)。
在configurable為false的情況下,writable為true可修改為false,如果writable為false,修改為true也會(huì)被忽略,嚴(yán)格模式報(bào)錯(cuò)。
Object.defineProperty(person, 'name', {? configurable: false})Object.defineProperty(person, 'name', {? value: 'b'})console.log(person.name) // b? configurable為false,writable為true時(shí)還能修改Object.defineProperty(person, 'name', {? writable: false})
person.name = 'c' // errorObject.defineProperty(person, 'name', {? writable: true}) // error
2、訪問器屬性
訪問器屬性不包含數(shù)據(jù)值,包含一對(duì)getter和setter函數(shù)(不需要同時(shí)存在)。
訪問器屬性必須通過Object.defineProperty定義。訪問器屬性有以下四個(gè)特性:
configurable: 能否通過delete刪除屬性,能否修改屬性特性(注意是特性),能否修改為數(shù)據(jù)屬性,默認(rèn)是true
enumerable: 能否通過for-in遍歷到該屬性,默認(rèn)是true
get: 在讀取屬性時(shí)調(diào)用的函數(shù)。默認(rèn)值是undefined
set: 在寫入屬性時(shí)調(diào)用的函數(shù)。默認(rèn)是undefined
五、數(shù)據(jù)屬性和訪問器屬性相互轉(zhuǎn)換:
數(shù)據(jù)屬性 -> 訪問器屬性
給數(shù)據(jù)屬性設(shè)置了get或set特性,value和writable特性就會(huì)被廢棄,該屬性變?yōu)樵L問器屬性
訪問器屬性 -> 數(shù)據(jù)屬性
給訪問器屬性設(shè)置了value或writable特性,get和set特性就會(huì)被廢棄,該屬性變?yōu)閿?shù)據(jù)屬性
注意:只有在configurable為true的情況下才可以相互轉(zhuǎn)換,即使數(shù)據(jù)屬性中在configurable為false的情況可以修改value或writable,訪問器屬性轉(zhuǎn)數(shù)據(jù)屬性只設(shè)置value或writable也不行。
[聲明]本網(wǎng)轉(zhuǎn)載網(wǎng)絡(luò)媒體稿件是為了傳播更多的信息,此類稿件不代表本網(wǎng)觀點(diǎn),本網(wǎng)不承擔(dān)此類稿件侵權(quán)行為的連帶責(zé)任。故此,如果您發(fā)現(xiàn)本網(wǎng)站的內(nèi)容侵犯了您的版權(quán),請(qǐng)您的相關(guān)內(nèi)容發(fā)至此郵箱【779898168@qq.com】,我們在確認(rèn)后,會(huì)立即刪除,保證您的版權(quán)。
官網(wǎng)優(yōu)化
整站優(yōu)化
渠道代理
400-655-5776