蛋白石.b桥类的内部机制

  • 本文关键字:内部 机制 白石 opalrb
  • 更新时间 :
  • 英文 :


我想知道与本地类的桥接在内部是如何工作的。(找不到任何相关文档)。

function NativeClass() { this.foo = "bar"; } class MyClass < NativeClass ; end

它是否类似于ES6或coffeescript的继承(从JS的角度)?

是否可以在函数上定义可以像常规方法一样调用的方法(如:

)

RubyClass ' .prototype '。foo = function(){返回RubyClass实例' @accessor} ) not the .$foo ' .

还有一件事如果Ruby类继承了原生类,是否可以在该函数中引用将被实例化的Foo类的实例,如function(){this.bar = Foo's instance}?

是否有可能从Ruby类返回本机类(从本机继承)(例如,如果一些JS库需要本机类作为参数)?

基本上,任何Opal类都是带有一些附加属性的类class的完整对象实例。在此上下文中最相关的是$$proto,它保存了类的原型,$$alloc保存了原始的类构造函数。

映射C-Ruby实现#allocate将在内部调用$$alloc, Class#new将依次调用#allocate#initialize(就像常规Ruby一样)。

大多数桥接类都是构建一个完整的Class实例,并注入原生JS类的原型和构造函数。然后复制BasicObject中的方法,并(IIRC)将Kernel混合在一起。

要了解更多细节,我建议直接从Opal来源阅读相关部分。当我这样做的时候,我学到了很多!:)

起始点有:

  • 在runtime.js中检查传递的超类是否为函数
  • 类。参考Class
  • 中的.new#allocate方法

最新更新