鼓励使用JSDoc中的 @private 和 @protected 进行标注。 有个写做 --jscomp_warning=visibility 的编译器参数,编辑器会提示违反可见性相关的警告。具体内容请查看 Closure Compiler Warnings. 标注为 @private 的全局变量和函数,只有其自身文件中的代码能进行访问和调用。 构造函数标注了 @private 则代表着只能在自身文件中使用它的公共静态方法或实例化,也可以通过 instanceof 操作符进行访问。 永远不要为全局变量,函数和构造函数标记 @protected 。 标记 @private 的属性,自身文件内的代码可以访问,如果这个属性是某个类的,那此类的所有静态方法和实例方法也是都可以访问的。 但来自不同文件的子类是无法访问或重载该属性的。 标记 @protected 的属性,自身文件内的代码可以访问,如果这个属性是属于某个类的,那此类包括子类的所有静态方法和实例方法都可以访问。 注意,这些语义不同于C++和Java,它们允许在同一文件中访问私有和受保护的属性,而不只是限制在同一个类或类继承中。而且,不向在C++中,私有属性是不能被子类重载的。 在JavaScript中,子类(如 AAPrivateClass)和该类的原型类的可见性是相同的,没有办法实现两个子类是公共的,而他们的构造函数却是私有(因为构造函数很容易别名)。