是否有可能知道何时删除一个属性?

var o = { a: 1 }; delete oa; 

我想在属性被删除时得到通知,类似于getter和setter访问器描述符。

可能吗?

如果你可以控制你的环境,并确保它是最新的,那么很好。 这篇关于Object.observer的文章将有所帮助。

http://updates.html5rocks.com/2012/11/Respond-to-change-with-Object-observe

否则,如果您需要更旧的浏览器,那么您可能需要自己编写它。 总是在你的脑海里有performance。 新的浏览器实现“工作者线程”,可能这就是Object.observe的资源。 旧的浏览器在一个线程上执行JavaScript,所以你没有这个优势。

你将不得不使用一个计时器,但只是“一个”,而不是多个… John Resig(jQuery先生)已经写了各种关于定时器的文章,以及他们如何在单个线程上执行。 这是其中之一:

http://ejohn.org/blog/how-javascript-timers-work/

注意。 我自己没有尝试过,所以不知道这个performance是否可以接受。

感谢@MarkGraham,我find了javascript和谐的Object.observe()规范提案的规范。

http://wiki.ecmascript.org/doku.php?id=harmony:observe

但是这并没有在node.js中实现(在快速search之后)。

我还发现代理 ,一个更强大的方法来拦截操作。 它也来自和谐,但在node.js可以使用–harmony-proxies标志或–harmony来启用所有和声function。

编辑:Node.js实现和谐代理的旧版本。 这是最新的: 直接代理和他们提供的例子不能按预期工作。 谷歌组

js中没有内置的“通知”系统。 但我认为(最简单的)解决scheme是:在删除属性后,使用您的删除pipe理代码调用一个方法(就像您对通知所做的那样)。