在Javascript中更改数据结构时触发函数

在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,

我正在做一个非常简单的项目,如果它更大,我会使用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, 
      {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,把它放在一个答案中。谢谢,正是我想要的