Object.defineproperty方法示例詳解
Object.defineproperty 的作用就是直接在一個(gè)對(duì)象上定義一個(gè)新屬性,或者修改一個(gè)已經(jīng)存在的屬性
Object.defineproperty可以接收三個(gè)參數(shù)
Object.defineproperty(obj, prop, desc)
obj : 第一個(gè)參數(shù)就是要在哪個(gè)對(duì)象身上添加或者修改屬性
prop : 第二個(gè)參數(shù)就是添加或修改的屬性名
desc : 配置項(xiàng),一般是一個(gè)對(duì)象
來(lái)一個(gè)簡(jiǎn)單的例子
let person = { name:"碼農(nóng)", age: 18 } Object.defineProperty(person,'sex',{ value:"男" }) console.log(person)
這不就是添加了
第三個(gè)參數(shù)里面還有6個(gè)配置控住屬性
writable: 是否可重寫 value: 當(dāng)前值 get: 讀取時(shí)內(nèi)部調(diào)用的函數(shù) set: 寫入時(shí)內(nèi)部調(diào)用的函數(shù) enumerable: 是否可以遍歷 configurable: 是否可再次修改配置項(xiàng)
let person = { name:"碼農(nóng)", age: 18 } Object.defineProperty(person,'sex',{ value:"男", //設(shè)置屬性值 enumerable:true, //控制屬性是否可以枚舉,默認(rèn)值是false writable:true, //控制屬性是否可以被修改,默認(rèn)值是false configurable:true //控制屬性是否可以被刪除,默認(rèn)值是false }) console.log(person)
- writable:true 控制屬性是否可以被修改,控制臺(tái)也看的當(dāng)為TRUE的時(shí)候?qū)傩灾悼梢员恍薷?/li>
- configurable:true 控制屬性是否可以被刪除
- enumerable:true 控制屬性是否可以枚舉,true的話簡(jiǎn)單的說(shuō)就是可以遍歷獲取該值
還有最重要的兩個(gè)屬性 set和get(即存取器描述:定義屬性如何被存?。@兩個(gè)屬性是干嘛的?
注意:當(dāng)使用了getter或setter方法,不允許使用writable和value這兩個(gè)屬性(如果使用,會(huì)直接報(bào)錯(cuò)滴)
get 是獲取值的時(shí)候的方法,類型為 function ,獲取值的時(shí)候會(huì)被調(diào)用,不設(shè)置時(shí)為undefined
set 是設(shè)置值的時(shí)候的方法,類型為 function ,設(shè)置值的時(shí)候會(huì)被調(diào)用,undefined
get或set不是必須成對(duì)出現(xiàn),任寫其一就可以
代碼來(lái)看看
let number = 18 let person = { name:'碼農(nóng)', sex:'男', } Object.defineProperty(person,'age',{ //當(dāng)有人讀取person的age屬性時(shí),get函數(shù)(getter)就會(huì)被調(diào)用,且返回值就是age的值 get(){ console.log('有人讀取age屬性了') return number }, //當(dāng)有人修改person的age屬性時(shí),set函數(shù)(setter)就會(huì)被調(diào)用,且會(huì)收到修改的具體值 set(value){ console.log('有人修改了age屬性,且值是',value) number = value } }) console.log(person)
get:當(dāng)有人讀取person的age屬性時(shí),get函數(shù)(getter)就會(huì)被調(diào)用,且返回值就是age的值
set:當(dāng)有人修改person的age屬性時(shí),set函數(shù)(setter)就會(huì)被調(diào)用,且會(huì)收到修改的具體值
可以實(shí)現(xiàn)一個(gè)數(shù)據(jù)的聯(lián)動(dòng)效果
到此這篇關(guān)于Object.defineproperty方法的文章就介紹到這了,更多相關(guān)Object.defineproperty方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決webpack無(wú)法通過(guò)IP地址訪問(wèn)localhost的問(wèn)題
下面小編就為大家分享一篇解決webpack無(wú)法通過(guò)IP地址訪問(wèn)localhost的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02使用Nginx部署前端項(xiàng)目的詳細(xì)步驟記錄
在實(shí)際開(kāi)發(fā)中我們通常會(huì)使用Nginx來(lái)部署前端靜態(tài)頁(yè)面,以提供快速訪問(wèn)速度和良好的用戶體驗(yàn),這篇文章主要給大家介紹了關(guān)于使用Nginx部署前端項(xiàng)目的詳細(xì)步驟,需要的朋友可以參考下2024-08-08JavaScript一元正號(hào)運(yùn)算符示例代碼
這篇文章主要給大家介紹了關(guān)于JavaScript一元正號(hào)運(yùn)算符的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用JavaScript具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06JavaScript Function函數(shù)類型介紹
在JS中,Function(函數(shù))類型實(shí)際上是對(duì)象;每個(gè)函數(shù)都是Function類型的實(shí)例;而且都與其他引用類型一樣具有屬性和方法2015-04-04JS使用數(shù)組實(shí)現(xiàn)的隊(duì)列功能示例
這篇文章主要介紹了JS使用數(shù)組實(shí)現(xiàn)的隊(duì)列功能,結(jié)合實(shí)例形式分析了javascript基于數(shù)組的隊(duì)列定義、元素添加、讀取等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03微信小程序?qū)崿F(xiàn)省市區(qū)三級(jí)地址選擇
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)省市區(qū)三級(jí)地址選擇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11Ajax局部更新導(dǎo)致JS事件重復(fù)觸發(fā)問(wèn)題的解決方法
如果頁(yè)面中包含一個(gè)ajax更新的列表,那么需要小心非動(dòng)態(tài)更新部分的事件處理,下面以帶有公共工具欄的列表界面為例2014-10-10