google-closure-compiler 在高级模式下,警告以下代码。这是由命名空间扁平化引起的。
var com.my.test.namespace = {};
com.my.test.namespace.a = new Class ({
name : "test",
initialize : function() { //constructor
alert(this.name);
}
});
com.my.test.namespace.a();
在启用调试的高级模式下运行 google-closure-compiler 时,com.my.test.namespace.a 被替换为 com$my$test$namespace$a
所以,缩小后的代码大致如下,
var com.my.test.namespace = {};
com$my$test$namespace$a = new Class ({
name : "test",
initialize : function() { //constructor
alert(this.name);
}
});
com$my$test$namespace$a();
当调用 com$my$test$namespace$a() 时,“this”不再是 com.my.test.namespace,它是窗口,因此是编译器警告。
一些文档建议将“this”替换为 com.my.test.namespace.a 以解决此问题。但是,这样做是正确的吗?com.my.test.namespace.a.name 指向什么?它肯定不像当前实例的“名称”属性。
正确的方法是什么?com.my.test.namespace.a.prototype.name ?
PS:
I am using mootools library for the Class method.