当你选择了一个子命名空间下进行开发,请告知父命名空间的负责人(你懂得)。假设你开始了一个项目是sloths下的hats,请确保这个Sloth项目的负责人知道是你在用sloth.hats。
外部代码和内部代码使用不同的命名空间。
“外部代码”指的是你的代码体系以外的可独立编译的代码,比如你用了一个外部库在 foo.hats.* 下,那你自己的内部代码就不应该再在其下面了,否则会导致产生冲突和难以维护。
foo.require('foo.hats');
/**
* 错 -- 不要这样做
* @constructor
* @extend {foo.hats.RoundHat}
*/
foo.hats.BowlerHat = function() {
};
如果你需要在外部命名空间中定义新的API,那你应该通过显式的方法导出公共API函数。自身内部的代码需要使用这些API时,可以直接通过内部命名来调用,一是为了保持一致性,二是能让编译器更好的优化代码。
foo.provide('googleyhats.BowlerHat');
foo.require('foo.hats');
/**
* @constructor
* @extend {foo.hats.RoundHat}
*/
googleyhats.BowlerHat = function() {
...
};
goog.exportSymbol('foo.hats.BowlerHat', googleyhats.BowlerHat);