作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在每个 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;
我扫描了其余代码以寻找 .A(或任何其他字母),但没有成功。这到底有什么用?最终结果是 dart() 函数/构造函数的 A-Z 实例是空类对象,但有什么用呢?
使用像 /[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);
这让我更加困惑了。由于该行看起来像 SomeObject = convertToFastObject(SomeObject);
没有变化。
编辑/更新:找到了 convertToFastObject 及其前身 dart() 类的解释 - Why the convertToFastObject function make it fast?这是一个优化技巧。仍然留给我一个问题,为什么是 A-Z 实例列表,它只是另一种优化技巧还是某种代码哈希表?
最佳答案
A-Z 类是为各种 Dart 库保留的全局变量。正如您在 source 中看到的那样,其中的一小部分用于特定的库。 :
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",
];
所有其余似乎都用于隔离,如 globalObjectFor 所示方法,并查看使用 isolates 的 dart2js 编译代码的结果。
关于dart - 对于 dartjs 什么是字母表( A 到 Z )空类实例的奇数列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27630248/
我是一名优秀的程序员,十分优秀!