Javascript中缺少捕获方法并做一些逻辑?

ajs*_*sie 4 javascript porting sample reification method-missing

在Ruby中,您可以捕获对缺少的方法的调用,并在运行中定义它.

我想在JavaScript中完成的是拥有一个没有方法的对象.我想将一个缺少的方法转换为对emit()的调用:

app.isReady() -> app.emit("isReady")
soldier.kills() -> soldier.emit("kills")
Run Code Online (Sandbox Code Playgroud)

我认为最好捕获丢失的方法错误并运行emit(methodName),而不是在运行时定义所有方法(来自固定列表).这样,如果对象有数百或数千个事件,我们就没有性能开销.

做这个的最好方式是什么?

更新:这是一个API设计,所以我宁愿远离:

try {
  app.isReady()
} catch(e) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何在幕后完成这一点,以便用户可以像往常一样使用方法.

Ray*_*nos 6

这样,如果对象有数百/数千个事件,我们就没有性能开销.

我认为将方法添加到对象的性能开销小于将​​方法调用转换为emit调用的性能开销是一个巨大的误解.

但是,您无法在ES5中实现此功能

然而,可以使用Harmony代理实现这一点.

我建议看看模拟__noSuchMethod__.

我相信ES6代理是实验性的,可以在V8中打开,所以今天你可以将它们与node.js一起使用.