是否有适用于所有属性的 Object.watch/适用于 __noSuchMethod__ 的垫片?
Posted
技术标签:
【中文标题】是否有适用于所有属性的 Object.watch/适用于 __noSuchMethod__ 的垫片?【英文标题】:Is there Object.watch for all properties / a shim for __noSuchMethod__ available? 【发布时间】:2011-09-19 17:56:05 【问题描述】:我想通过在每次获取/存储设置时执行一些代码来扩展localStorage
。我可以为localStorage
的所有现有属性定义一个getter/setter,但问题在于新设置。
例如,localStorage['somenewsetting'] = 123
创建一个新设置。我想为这个属性自动定义一个 getter/setter,这样我的添加代码也可以为新设置执行。
基本上我需要Object.watch
,但对于所有属性。我找到的是__noSuchMethod__
,但它在 Chrome 上不可用。这种方法有可用的垫片吗?或者还有其他方法可以查看对象的所有属性吗?
同样,我需要在 Chrome 上完成这项工作。
【问题讨论】:
如何使用setItem
访问所有作业。我为localStorage
/sessionStorage
编写了一个包装器/外观类,用于序列化RegExp
s 甚至字符串(作为带引号的字符串)并反序列化普通对象Date
s 和RegExp
s。您可以这样做,以在 setItem
代理函数中添加附加代码。
【参考方案1】:
不,至少对于 Chrome 来说不是。无论如何,__noSuchMethod__
仅适用于函数。
Proxy
支持是 under discussion 用于下一版本的 ECMAScript (Harmony),甚至是 already implemented in SpiderMonkey。在那之前,恐怕你运气不好。
——有a request to implement __noSuchMethod__
in V8,但被拒绝了。实施 Proxy 的请求不再成功:633 was merged as duplicate,Chromium 团队 doesn't care much about implementing Proxy support。
【讨论】:
【参考方案2】:是的,我也想要那个。很多很多其他人也是如此。不会发生。曾经。 Chrome (V8) 在其 JS API 方面遵循 webkit。 __noSuchMethod__
是 Mozilla 创建的非标准事件,已被 ECMAScript (javascript) 正式拒绝。
换句话说,它永远不会存在:'(
(如果是这样,那将是经过多次争论,不会很快)
【讨论】:
不,您无法解决它,因为它的级别太低了。好吧,您可以修补 chrome(如果您寻找它,就会有一个补丁),但这只会对您真正有帮助,而不是一般的开发 :)以上是关于是否有适用于所有属性的 Object.watch/适用于 __noSuchMethod__ 的垫片?的主要内容,如果未能解决你的问题,请参考以下文章
是否有适用于所有内容的通用OpenId Connect客户端库?