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

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

可能吗?

4

3 回答 3

1

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

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

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

我还发现了Proxies,一种更强大的拦截操作方式。它也来自 Harmony,但在 node.js 中可以使用 --harmony-proxies 标志或 --harmony 启用所有 Harmony 功能。

编辑:Node.js 实现了旧版本的和谐代理。这是最新的:直接代理及其提供的示例无法按预期工作。谷歌群组

于 2013-06-21T11:41:53.157 回答
1

如果您可以控制您的环境并确保它是最新的,那就太好了。这篇关于 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/

笔记。我自己没有尝试过,所以不知道性能是否可以接受。

于 2013-06-21T11:18:51.060 回答
0

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

于 2013-06-21T11:06:28.513 回答