编程实践——使用helper方法隐藏对象
Programming practices - using helper method to hide object
我正在阅读 closure library 的代码段,我在那里看到了这个代码段:
/**
* Gets the document object being used by the dom library.
* @return {!Document} Document object.
*/
goog.dom.getDocument = function() {
return document;
};
为什么我们将文档引用包装在 getter 方法中?文档不是全局对象吗?
我看到两个合乎逻辑的原因,都涉及闭包编译器:
类型检查 - 当调用这个函数时,闭包编译器会知道 return 类型是 Document
类型并且它永远不会为空。据推测 Google Closure 开发人员可以将其硬编码到 Closure 编译器中,但是通过明确说明,他们避免为全局对象上存在的属性向 Closure 编译器添加特殊情况。
缩小 - 当函数经过 ADVANCED_OPTIMIZATIONS
时,goog.dom.getDocument
可以缩小到 a.b.c
之类的东西。 Closure Compiler 无法重命名 document
因为它无法控制全局对象上的变量名,但它肯定可以重命名 reference document
的函数给你较小的源代码。
我正在阅读 closure library 的代码段,我在那里看到了这个代码段:
/**
* Gets the document object being used by the dom library.
* @return {!Document} Document object.
*/
goog.dom.getDocument = function() {
return document;
};
为什么我们将文档引用包装在 getter 方法中?文档不是全局对象吗?
我看到两个合乎逻辑的原因,都涉及闭包编译器:
类型检查 - 当调用这个函数时,闭包编译器会知道 return 类型是
Document
类型并且它永远不会为空。据推测 Google Closure 开发人员可以将其硬编码到 Closure 编译器中,但是通过明确说明,他们避免为全局对象上存在的属性向 Closure 编译器添加特殊情况。缩小 - 当函数经过
ADVANCED_OPTIMIZATIONS
时,goog.dom.getDocument
可以缩小到a.b.c
之类的东西。 Closure Compiler 无法重命名document
因为它无法控制全局对象上的变量名,但它肯定可以重命名 referencedocument
的函数给你较小的源代码。