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)
我想知道如何在幕后完成这一点,以便用户可以像往常一样使用方法.
这样,如果对象有数百/数千个事件,我们就没有性能开销.
我认为将方法添加到对象的性能开销小于将方法调用转换为emit调用的性能开销是一个巨大的误解.
但是,您无法在ES5中实现此功能
然而,可以使用Harmony代理实现这一点.
我建议看看模拟__noSuchMethod__.
我相信ES6代理是实验性的,可以在V8中打开,所以今天你可以将它们与node.js一起使用.