var o = { a: 1 };
delete o.a;
我希望在删除属性时收到通知,类似于 getter 和 setter 访问器描述符。
可能吗?
感谢@MarkGraham,我找到了 JavaScript 和谐的 Object.observe() 规范提案的规范。
http://wiki.ecmascript.org/doku.php?id=harmony:observe
但这并没有在 node.js 中实现(在快速搜索之后)。
我还发现了Proxies,一种更强大的拦截操作方式。它也来自 Harmony,但在 node.js 中可以使用 --harmony-proxies 标志或 --harmony 启用所有 Harmony 功能。
如果您可以控制您的环境并确保它是最新的,那就太好了。这篇关于 Object.observer 的文章会有所帮助。
http://updates.html5rocks.com/2012/11/Respond-to-change-with-Object-observe
如果做不到这一点,如果您要为旧版浏览器提供服务,那么您可能不得不自己编写它。始终将性能放在脑海中。新的浏览器实现了“工作线程”,大概这就是 Object.observe 的资源。
您将不得不使用一个计时器,但只是“一个”,而不是多个...... John Resig(jQuery 先生)写了很多关于计时器以及它们如何在单个线程上执行的文章。这是其中之一:
http://ejohn.org/blog/how-javascript-timers-work/
笔记。我自己没有尝试过,所以不知道性能是否可以接受。
js 中没有针对这些东西的内置“通知”系统。但我认为(最简单的)解决方案是:在删除属性后使用您的删除管理代码调用一个方法(就像您对通知所做的那样)。