<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div class="contanier">
<input type="text" id="name" οninput="handleInput(event,this)">
<input type="text" id="year" οninput="handleInput(event,this)">
<input type="text" id="age" οninput="handleInput(event,this)">
<div>
数据变化如下 vue2.0:
<span id="vue2"></span>
</div>
<div>
数据变化如下 vue3.0:
<span id="vue3"></span>
</div>
</div>
<script>
const obj = observe({
year:'',
age:''
},(key,value)=>{
document.getElementById("vue2").innerHTML = key+":"+value
});
const obj1 = observe2({
year:'',
age:''
},(key,value)=>{
document.getElementById("vue3").innerHTML =key+":"+value
});
function handleInput(e,t){
if(t.id=="year"){
obj1.year = e.target.value;
obj.year = e.target.value
}
if(t.id=="age"){
obj1.age = e.target.value
obj.age = e.target.value
}
if(t.id=="name"){
obj1.name = e.target.value
}
}
function observe(obj,callback){
const newObj = {};
Object.keys(obj).forEach(key=>{
Object.defineProperty(newObj,key,{
configurable:true,
enumerable:true,
get (){
return obj[key];
},
set (newVal){
obj[key]=newVal;
callback(key,newVal)
}
})
})
return newObj;
}
function observe2(obj,callback){
return new Proxy(obj,{
get:(target,key)=>{
return targetp[key]
},
set:(target,key,value)=>{
target[key]=value;
callback(key,value)
}
})
/*return new Proxy(obj,{
get(target,key){
return target[key]
},
set(target,key,value){
target[key]=value
callback(key,value)
}
})*/
}
</script>
</body>
</html>