每个 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() 函数/构造函数的 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);
这让我更加困惑。因为那行似乎SomeObject = convertToFastObject(SomeObject);
没有变化。
编辑/更新:找到了对 convertToFastObject 及其前身 dart() 类的解释 -为什么 convertToFastObject 函数让它变得更快?这是一个优化技巧。仍然给我留下一个问题,为什么 AZ 实例列表,它只是另一个优化技巧还是某种代码哈希表?