2012-03-07 4 views
1

JSON.parseから生成するオブジェクトの配列があります。私はこのようにそのプロパティにアクセス: Googleクローズコンパイラでプロパティの名前を変更しない

AnObject['PhoneList'][i]['PhoneLabel'] 

私はGoogleの閉鎖コンパイラによるコードを実行

は、プロパティの名前が難読化とはっきりと見えていません。なぜオブジェクトのプロパティの名前が難読化されていないのですか?

+0

MyArray [i] MyObject ['Prop1'] 'は有効なjavascriptではありません。正してください。あなたはおそらく 'MyArray [i] .MyObject ['Prop1']'を意味しますか? – jfriend00

+0

@ jfriend00:ok、訂正しました。実際には、他のオブジェクトの配列を含むオブジェクトです。 – frenchie

+0

['PhoneList']と['PhoneLabel']という文字列を使用しています。 Closure Compilerは決して文字列の名前を変更しません。 – AndroidDev

答えて

1

Google閉鎖には、名前の変更と名前の変更が困難な場合があります。たとえば、Googleクロージャのコンパイル済みコード以外のコードで作成または参照されるデータ構造の名前を変更することはできません。また、両側で同じコードが必要になることもありません。さらに、構築された文字列を介してプロパティを参照すると、クロージャがその仕事をうまくやり遂げることができなくなります。したがって、Closureには、これを制御して何をすべきかを指示するのに役立つ一連の規則と設定があります。私はあなたがこれらの参照でそれらのルール/設定をよく読んでお勧めしたい:

https://developers.google.com/closure/compiler/docs/api-tutorial3

https://developers.google.com/closure/compiler/docs/compilation_levels

https://groups.google.com/group/closure-stylesheets-discuss/browse_thread/thread/386ba6db27a43887?pli=1

https://developers.google.com/closure/compiler/docs/limitations

そして、この最後の参照からの引用:

関数名またはパラメータ名の文字列表現

コンパイラは関数と関数のパラメータの名前を変更しますが、 は関数またはパラメータを参照する文字列を変更しません。 したがって、関数内のパラメータまたはパラメータ の名前をコード内の文字列として表すことは避けてください。たとえば、プロトタイプライブラリ function argumentNames()はFunction.toString()を使用して、関数のパラメータの名前の を取得します。しかし、argumentNames()は のコードで引数の名前を使用することがありますが、シンプルモードの コンパイルではこの種の参照が壊れます。

+0

プロパティが定義されていないという警告が表示されていたので、ドット表記からブラケット表記に変更しました。 http://stackoverflow.com/questions/9561138/how-can-i-prevent-the-warning-property-myprop1-never-defined-on-myobject – frenchie

+0

@frenchie - それはクロージャーがそれを行うことができないようにしていますそれらのプロパティ上のもの。私は既にあなたに何度も何度も言いました。コンパイラ/隠蔽/圧縮ツールでは、外部の代理店(コンパイルスコープ外)によって生成されたプロパティの名前を正しく変更できません。それはあなたがやっていることややりたいことのようです。いくつかのHTML(Closureの範囲外)からJSONをロードしています。そのため、これらのプロパティの名前をClosureで変更することはできません。そうしないと、JSONとコードが一致しません。 – jfriend00

+0

ok、それは物事の仕方だと思います。 – frenchie

0

引用符付きの文字列は、名前を変更しない(「エクスポートする」)プロパティに使用される構文です。 おそらく代わりに

AnObject.PhoneList[i].PhoneLabel 

を使用します。

0

Googleクロージャコンパイラは引用符付きの文字列には触れません。

myObj.prop = 3; 

は改名さプロプをもたらすであろう(そしてこのmyobjすぎるおそらく)

myObj['prop'] = 3; 

はそのまま残り '支柱' が生じます。

関連する問題