在Javascript中更改数据结构时触发函数
我正在做一个非常简单的项目,如果它更大,我会使用angular或主干,或者其他一些MVC库。在我的例子中,只要在数组/对象发生更改时触发一个函数。最简单的方法是什么 下面是使用getter/setter监视对象属性的一种简单而有效的方法:在Javascript中更改数据结构时触发函数,javascript,jquery,client-side,Javascript,Jquery,Client Side,我正在做一个非常简单的项目,如果它更大,我会使用angular或主干,或者其他一些MVC库。在我的例子中,只要在数组/对象发生更改时触发一个函数。最简单的方法是什么 下面是使用getter/setter监视对象属性的一种简单而有效的方法: var myObj={a:1, b:2, c:3}; function watch(obj, prop, callBack){ var x=obj[prop]; Object.defineProperty( obj, prop,
var myObj={a:1, b:2, c:3};
function watch(obj, prop, callBack){
var x=obj[prop];
Object.defineProperty(
obj, prop,
{get:function(){return x;},
set:function(n){ callBack(n,x); x=n; }
}) ;
}
watch(myObj, "b", function(n,x){
alert("was:"+x+", now " + n);
});
myObj.b=123; // shows: "was 2, now 123"
我在这个概念和小胡子的基础上构建了一个简单的MVC,它工作得非常好。我认为最简单的方法是使用一个像主干一样的库。。。说真的,为什么不呢?这比你自己重新发明同样的东西花费的时间要少。我觉得如果我只是试图监视一个数组缓存var x=obj.x,使用Object.DefinePropertyYobj,'x',{get:function{return x;},set:functionn{x=n;alertx;}在对象上。这是一行代码对一个完整库…@dandavis,把它放在一个答案中。谢谢,正是我想要的