var o = { a: 1 };
delete o.a;
我希望在删除属性时收到通知,类似于getter和setter访问器描述符。
有可能吗?
答案 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中没有内置的“通知”系统。 但我认为(最简单的)解决方案是:在删除属性后使用删除管理代码调用方法(就像使用通知一样)。