私は、拡張モードで Closure Compiler と互換性があることを望むライブラリを作成しています。ライブラリ内のほとんどのオブジェクトは、API の一部であることが多い属性の内部オブジェクトを保持しているため、ソース ファイルはこのような非常に多くの関数でいっぱいになります。
/*
* Get name.
*/
Layer.prototype.getName = function() {
return this.attrs.name;
}
/*
* Set name.
*/
Layer.prototype.setName = function(name) {
this.attrs.name = name;
}
コードを少し整理するためにこれを最適化する方法は 10 億通り考えられます。一例: KineticJS は、この関連する質問に従って、次のようなことを行います。
Global.addGettersSetters = function(obj, property) {
obj['get'+property] = function() { return this.attrs[property] }
obj['set'+property] = function(val) { this.attrs[property] = val }
}
// Later that day, in our original object, we have:
Global.addGettersSetters(Layer, 'name');
私の理解では、これは Closure Compiler ではノーノーです。Layer のプロパティを文字列として指定しているため、名前は短縮されず、関数は最適化されません。
では、コードを乱雑にすることなく、インターフェイスを完全かつ適切に定義する方法はありますか? Closure Library で見落としているものがあるのではないでしょうか?
別の解決策: 最新の JS で C# スタイルのプロパティを実行する方法はありますか? ある意味で、Closure Compilerは許容できると思いますか? 私はこのライブラリで Webkit と Webkit のみをターゲットにする余裕があるので、まだ完全に実装されていないものは問題ありません。