微信小程序數(shù)據(jù)劫持代理的實現(xiàn)
index.html

index.js
// Vue數(shù)據(jù)劫持代理
//模擬Vue中data選項
let data = {
username:'小鐳',
age:3
}
// 模擬組件的實例
let _this={}
// 利用object.defineProperty()
for(let item in data){
console.log(item,data[item]);
Object.defineProperty(_this,item,{
// get作用:用來獲取擴展屬性值,當(dāng)獲取該屬性時調(diào)用get方法
get(){
console.log('get()');
return data[item]
}
})
}
console.log(_this)
當(dāng)要獲取訪問age或username的值時,才會調(diào)用get()方法,打印get()

若要修改data中的username的 值,可以直接通過_this.username修改嗎?
答案是:不可以

(沒有修改成功,username還是“小鐳")

可以通過set方法修改值


for(let item in data){
console.log(item,data[item]);
Object.defineProperty(_this,item,{
// get作用:用來獲取擴展屬性值,當(dāng)獲取該屬性時調(diào)用get方法
get(){
console.log('get()');
return data[item]
},
//set作用:監(jiān)視擴展屬性的,只要已修改就調(diào)用
set(newValue){
console.log('set()',newValue);
// _this.username=newValue; 千萬不要在set方法中修改當(dāng)前擴展屬性的值,會出現(xiàn)死循環(huán)
data[item] = newValue;
}
})
}(修改成功!)

到此這篇關(guān)于微信小程序數(shù)據(jù)劫持代理的實現(xiàn)的文章就介紹到這了,更多相關(guān)小程序數(shù)據(jù)劫持代理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript高級程序設(shè)計 讀書筆記之十一 內(nèi)置對象Global
由ECMAScript實現(xiàn)提供的、獨立于宿主環(huán)境的所有對象,在ECMAScript程序開始執(zhí)行時出現(xiàn)2012-03-03
JavaScript常見錯誤:“無法讀取未定義的屬性”的原因及解決方案
本文將深入探討“無法讀取未定義的屬性”這一常見JavaScript錯誤,分析其成因,提供詳細的解決方案和最佳實踐,幫助開發(fā)者有效地預(yù)防和修復(fù)此類問題,感興趣的小伙伴跟著小編一起來看看吧2024-12-12
js中方法重載如何實現(xiàn)?以及函數(shù)的參數(shù)問題
js中沒有辦法直接實現(xiàn)方法重載,但每一個函數(shù)都有一個特殊的參數(shù)arguments,利用它可以實現(xiàn)方法的重載,具體示例如下2013-08-08

