詳細モードの 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 を ADVANCED モードで実行すると、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() が呼び出されると、「これ」はもはや 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.