使用Object.defineProperty实现数据劫持
Object.defineProperty(目标对象,目标对象属性,配置对象)三个参数
<input type="text" placeholder="请输入内容" oninput="inputChange()">
<h1></h1>
var input = document.querySelector('input')
var h1 = document.querySelector('h1')
//目标对象
var obj = {
msg:'hhhhhh'
}
input.value = obj.msg
h1.innerHTML = obj.msg
//input框输入事件,修改obj中msg属性的值
function inputChange(){
obj.msg = input.value
}
let newMsg = obj.msg
Object.defineProperty(obj,'msg',{
// configurable:true,//可删除的
// enumerable:true,//可枚举的
// wrifable:true,//可修改的
get(){
console.log('读取了')
//注意不能直接返回obj上的msg属性,否则陷入死循环,所以上面let了一个newMsg 进行返回
return newMsg
},
set(value){
//把读取的值改为最新值
newMsg = value
//把h1的内容改为最新值
h1.innerHTML = value
//input框内的值改为最新
input.value =value
console.log('修改了,值为:',value)
}
})