Is there Object.watch for all properties / a shim for __noSuchMethod__ available?

早过忘川 提交于 2019-12-02 13:16:37

问题


I would like to extend localStorage by executing some code each time a setting is fetched/stored. I could define a getter/setter for all existing properties of localStorage, but the problem lies in new settings.

For example, localStorage['somenewsetting'] = 123 creates a new setting. I would like to automatically define a getter/setter for this property so that my addition code is also executed for new settings.

Basically I need Object.watch, but for all properties. What I found was __noSuchMethod__, but it is not available on Chrome. Is there any shim available for this method? Or is there another way of watching all properties of an object?

Again, I need to make this work on Chrome.


回答1:


Nope, at least, not for Chrome. __noSuchMethod__ only works for functions, anyway.

Proxy support is under discussion for the next version of ECMAScript (Harmony), and even already implemented in SpiderMonkey. Until then, you're out of luck, I'm afraid.

— there was a request to implement __noSuchMethod__ in V8 but it was refused. Requests to implement Proxy haven't been any more successful: 633 was merged as duplicate, and the Chromium team doesn't care much about implementing Proxy support.




回答2:


Yeah, I want that too. So do many, many other people. Isn't going to happen. Ever. Chrome (V8) follows webkit in terms of its JS API. __noSuchMethod__ is a non-standard event created by Mozilla and has been officially rejected from ECMAScript (JavaScript).

In other words, it will never exist :'(

(or if it does, it will be after much arguing and it won't be any time soon)



来源:https://stackoverflow.com/questions/6429521/is-there-object-watch-for-all-properties-a-shim-for-nosuchmethod-available

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!