javascript - Javascript 是否具有类似于 Ruby 的 method_missing 功能?

标签 javascript ruby metaprogramming

在 Ruby 中,我认为您可以调用一个尚未定义的方法,然后捕获调用的方法的名称并在运行时处理该方法。

Javascript 可以做同样的事情吗?

最佳答案

method_missing 不适合 JavaScript,原因与它在 Python 中不存在的原因相同:在这两种语言中,方法只是碰巧是函数的属性;并且对象通常具有不可调用的公共(public)属性。与 Ruby 相比,对象的公共(public)接口(interface)是 100% 的方法。

JavaScript 中需要的是一个钩子(Hook)来捕获对缺失属性的访问,无论它们是否是方法。 Python 有它:参见 __getattr__特殊方法。

__noSuchMethod__ Mozilla 的提案在充满它们的语言中引入了另一个不一致。

JavaScript 的前进方向是 Proxy mechanism (也在 ECMAscript Harmony 中),它更接近 customizing attribute access 的 Python 协议(protocol)而不是 Ruby 的 method_missing

关于javascript - Javascript 是否具有类似于 Ruby 的 method_missing 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9779624/

相关文章:

Javascript 固定菜单滚动故障

ruby - Sinatra 启用 :sessions not working on passenger/apache

ruby-on-rails - 如何在模块中为类方法起别名?

ruby-on-rails - 用于生产环境的 Rails 5.2 加密凭据

ruby-on-rails - 第一个 Ruby on Rails 应用程序 : use v3 (Beta) or 2. 3?

c - 将 JSON 转换为 C 结构的工具?

macros - 从 Julia 生成的函数中调用宏

javascript - 用于 NodeJS 的 IBM Informix 驱动程序 - 在 MacOS 上设置环境变量

javascript - 为什么 JavaScript `Intl.Collator.prototype.compare()` 方法会产生与特殊字符的传统 UTF-16 比较不同的结果?

javascript - 如何从 PhantomJS 中的字符串加载 DOM?