据记载,使用高级优化的Google Closure Compiler将重命名某些属性,但不会重命名其他属性。但是,似乎没有解释为什么它无法在以下代码中重命名属性“id”和“visibility”:
const model = {
age: 5,
id: 1234,
visibility: true,
skills: 4,
hair: 667
}
function doSomething() {
var s = Object.create(model);
console.log("Age: " + model.age);
s.visibility = "john";
s.age = 2;
s.skills = 5;
s.hair = 999;
model.age = 6;
return s;
}
doSomething();
这是编译器设置:
java -jar closure-compiler/compiler.jar \
--compilation_level ADVANCED_OPTIMIZATIONS \
--js_output_file scripts/release/test-min.js \
--warning_level VERBOSE \
--language_out ECMASCRIPT5 \
--language_in=ES6_Strict \
--js scripts/temp/test.js
你会注意到没有外围人。
答案 0 :(得分:2)
Closure-compiler只会在认为可以安全地重命名项目时重命名。有两种类型的属性可以重命名:
id
和visibility
都作为默认外设中的属性存在。因此,除非有足够的类型信息,否则无法重命名。
如果任何对象具有未知类型且具有相同名称的属性,则基于类型的重命名不会重命名它。这个未知属性甚至可以在默认的外部。
编译器比匿名对象更好地重命名实际类。您可以尝试看看如果您制作model
和实际课程会发生什么。