アクセス制御アノテーション、、、@private
および@protected
は、@public
開発者がプロパティと関数に必要なレベルの可視性を適用するのに役立つClosureCompilerのディレクティブです。
アクセス違反の警告を出すには、コンパイラフラグを使用します。
- --jscomp_warning = visibility
アクセス違反のエラーを発行するには、コンパイラフラグを使用します。
- --jscomp_error = visibility
アクセス制御の注釈はファイルごとに適用されます。つまり、注釈が付けられているか、同じファイル内のどこからでもアクセスできるプロパティ@private
が@protected
あります。また、これらの注釈はJavaScript言語の一部ではないため、コンパイラーはコンパイルされたコードからこれらの注釈を削除することに注意してください。
例
file1.js
goog.provide('ns1');
/**
* Global private variable.
* @private
*/
ns1.global = 'foo';
alert('ns1.global = ' + ns1.global); // OK in same file.
/** @constructor */
ns1.Constructor = function() {
/** @private */
this.secret_ = ns1.global;
};
ns1.instance = new ns1.Constructor();
alert(ns1.instance.secret_); // No warning in same file.
file2.js
goog.provide('ns2');
goog.require('ns1');
alert('ns1.global = ' + ns1.global); // Not allowed.
ns2.instance2 = new ns1.Constructor();
alert(ns2.instance2.secret_); // Not allowed.
フラグ--jscomp_error=visibility
を設定すると、ClosureCompilerは次のエラーを発行します。
ERROR - Access to private property global of ns1 not allowed here.
alert('ns1.global = ' + ns1.global);
^
ERROR - Access to private property secret_ of ns1.Constructor not allowed here.
alert(ns2.instance2.secret_);
^
Google JavaScriptスタイルガイドの可視性(プライベートフィールドと保護フィールド)を参照してください。