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实例列表的问题,它只是另一个优化技巧或某种代码的哈希表?
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编译代码的结果.
| 归档时间: |
|
| 查看次数: |
569 次 |
| 最近记录: |