对象访问火灾事件

时间:2011-07-17 05:51:28

标签: javascript

我有一个我之前创建的对象。

obj = new Object();

我想在每次更改一个对象子项时触发一个函数。

例如:

function changed()
{
  alert('Object changed';)
}

obj.test = 'blabla'; //fire changed().

这可能吗?谢谢

2 个答案:

答案 0 :(得分:1)

是和否。您正在寻找的是accessors and mutators(也称为getter和setter),但不幸的是它们不是跨浏览器兼容的。

如果您只是需要注意值已更改,并且延迟不是问题,您可以使用超时循环来轮询值:

function check(key, context, callback)
{
  var cachedValue;
  cachedValue = context[key];
  function doCheck()
  {
    if ( cachedValue != context[key] ) callback();
    setTimeout(doCheck, 100);
  }
  doCheck();
}

check('test', obj, testChanged);

这当然是轮询循环如何工作的一个非常简单的例子。有更好的方法可以做到这一点。

答案 1 :(得分:1)

如果出于兼容性原因,您不希望使用Javascript getters / setter(它们相当新 - 在2009年的第5版ECMA-262中添加),那么,如果您的上下文允许,请尝试创建setter函数:

setVariable(value)

为此,您的代码必须更新才能调用这些函数而不是设置属性。

我知道如果外部库(或其他代码)正在更新属性,这可能是不可能的。建议的轮询方法是一个很好的解决方案,只要异步通知足够(当然它不能通知中间值,即在间隔之间设置的值)。