1.0 版本
class Observer{
constructor(data){
this.observer(data);
}
observer(obj){
if(obj && typeof obj === 'object'){
for(let key in obj){
this.defineRecative(obj, key, obj[key])
}
}
}
defineRecative(obj, attr, value){
Object.defineProperty(obj, attr, {
get(){
return value;
},
set:(newValue)=>{
if(value !== newValue){
value = newValue;
console.log('监听到数据的变化');
}
}
})
}
}
let obj = {
name: 'tr',
age: 25
}
obj.name = 'tanran'
obj.age = 26
let obj = {
tr: {
name: 'tr',
age: 25
}
}
obj.tr.name = 'tanran'
2.0 版本
class Observer{
constructor(data){
this.observer(data);
}
observer(obj){
if(obj && typeof obj === 'object'){
for(let key in obj){
this.defineRecative(obj, key, obj[key])
}
}
}
defineRecative(obj, attr, value){
this.observer(value);
Object.defineProperty(obj, attr, {
get(){
return value;
},
set:(newValue)=>{
if(value !== newValue){
value = newValue;
console.log('监听到数据的变化');
}
}
})
}
}
let obj = {
tr: {
name: 'tr',
age: 25
}
}
obj.tr.name = 'tanran'
obj.tr = {
name: 'tanran',
age: 26
}
obj.tr.age = 24
3.0 版本
class Observer{
constructor(data){
this.observer(data);
}
observer(obj){
if(obj && typeof obj === 'object'){
for(let key in obj){
this.defineRecative(obj, key, obj[key])
}
}
}
defineRecative(obj, attr, value){
this.observer(value);
Object.defineProperty(obj, attr, {
get(){
return value;
},
set:(newValue)=>{
if(value !== newValue){
this.observer(newValue);
value = newValue;
console.log('监听到数据的变化');
}
}
})
}
}