对于dartjs,奇数列表的字母(A到Z)空类实例是什么?

Dav*_*vid 2 dart dart-js-interop

在每个dart文件的顶部编译的javascript是这个奇怪的列表.

function dart() {
  this.x = 0;
  delete this.x;
}
var A = new dart;
var B = new dart;
var C = new dart;
var D = new dart;
var E = new dart;
var F = new dart;
... etc etc ...
var Z = new dart;
Run Code Online (Sandbox Code Playgroud)

我扫描了其余的代码,寻找.A(或任何其他字母)没有运气.这究竟是为了什么目的?最终的结果是dart()函数/构造函数的AZ实例是空类对象,但有什么用?

/[A-Z]{1}\./我一样使用正则表达式找到一些字母实例用属性装饰,然后所有27个字母都通过这个函数运行:

function convertToFastObject(properties) {
  function MyClass() {
  }
  MyClass.prototype = properties;
  new MyClass();
  return properties;
}
;
A = convertToFastObject(A);
B = convertToFastObject(B);
C = convertToFastObject(C);
... etc etc ...
Z = convertToFastObject(Z);
Run Code Online (Sandbox Code Playgroud)

这进一步让我感到困惑.因为这条线似乎SomeObject = convertToFastObject(SomeObject);没有变化.

编辑/更新:找到convertToFastObject的解释,它的前身是dart()类 - 为什么convertToFastObject函数使它快速?这是一个优化技巧.仍然留下我为什么AZ实例列表的问题,它只是另一个优化技巧或某种代码的哈希表?

Pix*_*ant 5

AZ类是各种Dart库的保留全局变量.其中少数用于特定库,您可以在源代码中看到:

static const reservedGlobalObjectNames = const <String>[
    "A",
    "B",
    "C", // Global object for *C*onstants.
    "D",
    "E",
    "F",
    "G",
    "H", // Global object for internal (*H*elper) libraries.
    // I is used for used for the Isolate function.
    "J", // Global object for the interceptor library.
    "K",
    "L",
    "M",
    "N",
    "O",
    "P", // Global object for other *P*latform libraries.
    "Q",
    "R",
    "S",
    "T",
    "U",
    "V",
    "W", // Global object for *W*eb libraries (dart:html).
    "X",
    "Y",
    "Z",
];
Run Code Online (Sandbox Code Playgroud)

所有其余的似乎都用于隔离区,如globalObjectFor方法所示,并查看使用隔离区的dart2js编译代码的结果.