【发布时间】:2011-06-02 02:30:22
【问题描述】:
我想知道是否有一种方法可以在 Node.js 中模仿 PHP 的魔术方法 __get() 和 __set()。从这个问题:JavaScript getter for all properties 我知道你可以在 Rhino 中做到这一点,但 Node 是基于 V8 构建的。 V8 有办法做到这一点吗?
【问题讨论】:
标签: php javascript node.js v8 magic-methods
我想知道是否有一种方法可以在 Node.js 中模仿 PHP 的魔术方法 __get() 和 __set()。从这个问题:JavaScript getter for all properties 我知道你可以在 Rhino 中做到这一点,但 Node 是基于 V8 构建的。 V8 有办法做到这一点吗?
【问题讨论】:
标签: php javascript node.js v8 magic-methods
看看my following answer,它解释了如何使用ES6 proxies来解决这个问题。
【讨论】:
没有答案?看看现在。他们似乎找到了让 __get() 和 __set() 在 JavaScript 中工作的方法。我无法从源代码中弄清楚他们是如何做到的。 :(
编辑:查看Monitor All JavaScript Object Properties (magic getters and setters)
【讨论】:
我相信你不走运,至少as of March 2010。至少你有__defineGetter__ 和__defineSetter__,尽管我意识到这不是一回事。一般来说,我认为使用__noSuchMethod__/__get/method_missing 不好,因为它使代码更难阅读。考虑尝试不使用它,看看它是否能让你的代码更清晰。
【讨论】:
Message().action('join').groups([...]).message('Hi world!').send() 其中一些方法没有定义并且它们没有附加到内部对象。
Message 实例定义action、groups、message 和send 以返回this,就可以正常工作。显然你不能有动态方法,但我猜这就是你付出的代价。为什么我认为它很难阅读不是因为你使用__noSuchMethod__,而是因为你会在任何地方利用它们。假设上面的message 函数就是这样一个动态函数,我想看看它是在哪里定义的。我不能只搜索函数定义,我必须了解有一个动态处理程序在起作用。