0

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

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

它是否类似于 ES6 或咖啡脚本的继承(从 JS 角度来看)?

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

RubyClass`.prototype`.foo = function(){return RubyClass instances' @accessor} ) not the.$foo`。

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

是否可以从 Ruby 类(从原生继承)返回原生类(例如,如果某些 JS 库需要原生类作为 arg)?

4

1 回答 1

0

基本上,任何 Opal 类都是 Class 类的完整对象实例,具有一些附加属性。在这种情况下,最相关的是$$proto哪些持有类的原型,$$alloc哪些持有原始类的构造函数。

映射 C-Ruby 实现#allocate将在$$alloc内部调用,并将Class#new按顺序调用(就像常规 Ruby)。#allocate#initialize

从桥接类开始,构建一个完整的Class实例并注入原生 JS 类的原型和构造函数。然后BasicObject复制来自的方法并Kernel混合(IIRC)。

有关更多详细信息,我建议直接从 Opal 来源阅读相关部分。当我这样做时,我学到了很多东西!:)

一些起点是:

  • runtime.js,其中检查传递的超类是否为函数
  • class.rb.new方法#allocate来自Class
于 2015-10-09T23:12:27.480 回答