Vue defineProperty使用教程
1.認(rèn)識(shí)defineProperty
它是Object對象上的一個(gè)靜態(tài)實(shí)例方法,該方法作用為允許精確地添加或修改對象的屬性。
2.defineProperty
2.1使用defineProperty
該方法是Object對象上的一個(gè)靜態(tài)方法,該方法具有三個(gè)參數(shù),第一個(gè)參數(shù)為,我們要操作的一個(gè)對象,第二個(gè)參數(shù)為想要添加或修改的屬性名稱,第三個(gè)參數(shù)為一些相關(guān)配置。此方法允許更改這些額外詳細(xì)信息的默認(rèn)值。默認(rèn)情況下,使用添加的屬性O(shè)bject.defineProperty()不可寫、不可枚舉且不可刪除或者別的配置。
let obj = {
name : 'hzh',
sex : '男',
}
Object.defineProperty(obj,'age',{ // 第三個(gè)參數(shù)為相關(guān)配置,相當(dāng)于我們給了age屬性一個(gè)值為18
value : 18
})
console.log(obj); // {name: 'hzh', sex: '男', age: 18}
let newobj = Object.keys(obj)
console.log(newobj);// ['name', 'sex'] 說明不能被枚舉
obj.age = 20;
console.log(obj); // 還是{name: 'hzh', sex: '男', age: 18},說明age屬性不可寫、不可配置 2.2為defineProperty定義的屬性添加額外配置
可以被修改,向配置選項(xiàng)添加writable值為true,默認(rèn)為false
obj.age = 20;
Object.defineProperty(obj,'age',{ // 第三個(gè)參數(shù)為相關(guān)配置,相當(dāng)于我們給了age屬性一個(gè)值為18
value : 18,
writable : true
})
console.log(obj); // {name: 'hzh', sex: '男', age: 20} 修改完成可以被枚舉,向配置選項(xiàng)添加enumerable值為true,默認(rèn)為false
let newobj = Object.keys(obj)
Object.defineProperty(obj,'age',{ // 第三個(gè)參數(shù)為相關(guān)配置,相當(dāng)于我們給了age屬性一個(gè)值為18
value : 18,
writable : true,
enumerable : true
})
console.log(newobj);// ['name', 'sex', 'age'] 說明可以被枚舉了可以被刪除,向配置選項(xiàng)添加configurable值為true,默認(rèn)為false
let newobj = Object.keys(obj)
Object.defineProperty(obj,'age',{ // 第三個(gè)參數(shù)為相關(guān)配置,相當(dāng)于我們給了age屬性一個(gè)值為18
value : 18,
writable : true,
enumerable : true,
configurable : true
})
delete obj.age // 如果沒有配置項(xiàng)configurable為true,那么這里應(yīng)該是false,也就意味著不能被刪除
console.log(obj); // {name : 'hzh',sex : '男'} 說明可以被刪除了2.3defineProperty的getter
業(yè)務(wù):當(dāng)有人讀取defineProperty定義的對象的屬性時(shí),那么getter(get函數(shù))就會(huì)被調(diào)用,且返回值就是我們利用defineProperty定義的對象的屬性值(所以不允許配置項(xiàng)里面有了getter以后還有value,不然會(huì)報(bào)錯(cuò))
<code class="language-plaintext hljs">let number = 18;
let obj = {
name :'hzh',
sex :'男'
}
Object.defineProperty(obj,'age',{
get(){
console.log(`有人讀取了age屬性,值為${number}`)
return number // 返回的就是 age 屬性的值
}
})
console.log(obj);</code>
2.4defineProperty的setter
業(yè)務(wù):當(dāng)有人修改defineProperty定義的對象的屬性時(shí),那么setter(set函數(shù))就會(huì)被調(diào)用,且會(huì)收到修改的具體值
let number = 18;
let obj = {
name :'hzh',
sex :'男'
}
Object.defineProperty(obj,'age',{
get(){
console.log(`有人讀取了age屬性,值為${number}`)
return number
},
set(value){
console.log(`有人正在修改age值,值為${value}`)
number = value
}
})
console.log(obj);
到此這篇關(guān)于Vue defineProperty使用教程的文章就介紹到這了,更多相關(guān)Vue defineProperty內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue父元素點(diǎn)擊事件與子元素點(diǎn)擊事件沖突問題
這篇文章主要介紹了vue父元素點(diǎn)擊事件與子元素點(diǎn)擊事件沖突問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
Electron采集桌面共享和系統(tǒng)音頻(桌面捕獲)實(shí)例
這篇文章主要為大家介紹了Electron采集桌面共享和系統(tǒng)音頻(桌面捕獲)實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
vue 判斷兩個(gè)時(shí)間插件結(jié)束時(shí)間必選大于開始時(shí)間的代碼
這篇文章主要介紹了vue 判斷兩個(gè)時(shí)間插件結(jié)束時(shí)間必選大于開始時(shí)間的代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
vue?button的@click方法無效鉤子函數(shù)沒有執(zhí)行問題
這篇文章主要介紹了vue?button的@click方法無效鉤子函數(shù)沒有執(zhí)行問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
vue項(xiàng)目網(wǎng)站全局置灰功能實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了vue項(xiàng)目網(wǎng)站全局置灰功能實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Vue解析剪切板圖片并實(shí)現(xiàn)發(fā)送功能
這篇文章主要介紹了Vue解析剪切板圖片并實(shí)現(xiàn)發(fā)送功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02

