访问控制注解@private
、@protected
和@public
是闭包编译器的指令,可帮助开发人员强制执行所需的属性和函数的可见性级别。
要针对访问冲突发出警告,请使用 Compiler 标志:
要为访问冲突发出错误,请使用 Compiler 标志:
访问控制注释是在每个文件的基础上强制执行的,这意味着任何属性都被注释@private
或@protected
可以在同一文件中的任何位置访问。另请注意,编译器会从编译后的代码中删除这些注释,因为它们不是 JavaScript 语言的一部分。
例子
文件1.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.
文件2.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
后,闭包编译器会发出以下错误。
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 样式指南中的可见性(私有和受保护字段)。