是否有适用于所有属性的 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 编写了一个包装器/外观类,用于序列化RegExps 甚至字符串(作为带引号的字符串)并反序列化普通对象Dates 和RegExps。您可以这样做,以在 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客户端库?

如何使 minimumFontSize 属性适用于多行标签

适用于所有(或大多数)数据库的高效 SQL 测试查询或验证查询

Spring @Transactional 属性是不是适用于私有方法?