如下代码,通过Object.defineProperty实现的监听函数为什么只能执行一个监听——执行了最后一个监听过程,而第一个监听过程却没有运行,求解原因?
// 定义对象,包含属性uid初始化为1
let obj={
uid:0
};
// 监听函数
function watch (callback) {
Object.defineProperty(obj,'uid',{
get:function(){
return uid;
},
set:function(newValue){
uid=newValue;
console.log('set :',newValue);
//需要触发的渲染函数可以写在这...
callback();
}
})
};
//3秒后修改obj.uid的值
setTimeout(function () {obj.uid=100001;},3000)
//监听a以及后续操作
function func_a(){
watch(function(){console.log("后续操作——1")})
}
//监听b以及后续操作
function func_b(){
watch(function(){console.log("后续操作——2")})
}
func_a()
func_b()
结果是这样的:
set : 10001
后续操作——2
你本身的问题
更好地实现.
一个带有已发布事件的事件监听器就可以了