【问题标题】:Imitate PHP's __get(), __set() & __call() magic methods in Node.js在 Node.js 中模仿 PHP 的 __get()、__set() 和 __call() 魔术方法
【发布时间】: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


    【解决方案1】:

    看看my following answer,它解释了如何使用ES6 proxies来解决这个问题。

    【讨论】:

      【解决方案2】:

      没有答案?看看现在。他们似乎找到了让 __get() 和 __set() 在 JavaScript 中工作的方法。我无法从源代码中弄清楚他们是如何做到的。 :(

      编辑:查看Monitor All JavaScript Object Properties (magic getters and setters)

      【讨论】:

      • 有趣,我得看看。谢谢!
      【解决方案3】:

      我相信你不走运,至少as of March 2010。至少你有__defineGetter____defineSetter__,尽管我意识到这不是一回事。一般来说,我认为使用__noSuchMethod__/__get/method_missing 不好,因为它使代码更难阅读。考虑尝试不使用它,看看它是否能让你的代码更清晰。

      【讨论】:

      • 谢谢布赖恩!我将尝试这些方法,看看它们是否有效。我认为如果它们到处都是,它们会使代码更难阅读,但我认为如果在内部使用这些方法,会有重要的用例。我喜欢能够像这样设置链的前景:Message().action('join').groups([...]).message('Hi world!').send() 其中一些方法没有定义并且它们没有附加到内部对象。
      • 链接和方法缺失的东西是不相关的。只要Message 实例定义actiongroupsmessagesend 以返回this,就可以正常工作。显然你不能有动态方法,但我猜这就是你付出的代价。为什么我认为它很难阅读不是因为你使用__noSuchMethod__,而是因为你会在任何地方利用它们。假设上面的message 函数就是这样一个动态函数,我想看看它是在哪里定义的。我不能只搜索函数定义,我必须了解有一个动态处理程序在起作用。
      • 哎呀。我想我忘了回答这个问题。我完全同意它们是不相关的,除非正如你所说,它们没有在 Message 中定义。我希望那些是可以链接在一起的动态定义的属性。我认为这种构建对象的语法风格非常性感:-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 2012-04-05
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      相关资源
      最近更新 更多