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

时间:2013-06-21 10:54:24

标签: javascript node.js

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

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

有可能吗?

3 个答案:

答案 0 :(得分:1)

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

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

如果不这样做,如果你正在迎合旧浏览器,那么你可能不得不自己写。始终在脑海中表现出色。新的浏览器实现了“工作线程”,可能这就是Object.observe将要提供的资源。较旧的浏览器在单个线程上执行javascript,因此您没有这个优势。

你必须使用一个计时器,但只需“一个”,而不是多个...... John Resig(jQuery先生)撰写了各种关于计时器以及它们如何在单个线程上执行的文章。这是其中之一:

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

请注意。我自己没试过,所以不知道表演是否可以接受。

答案 1 :(得分:1)

感谢@MarkGraham我已经找到了针对javascript和谐的Object.observe()规范提案的规范。

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

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

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

编辑:Node.js实现和声代理的旧版本。这是最新的一个:direct proxies,它们提供的示例无法按预期工作。 google groups

答案 2 :(得分:0)

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