我正在为闭包编译器注释我的所有javascript,但是 - 我目前的代码在很大程度上取决于在对象中定义类,即:
Class.SomeClass = function() {};
Class.SomeOtherClass = function() {};
而不是:
function SomeClass() {};
SomeClass.prototype = {};
但是,它在尝试注释扩展时给了我一个警告......编译器声明我无法确定Class.SomeClass的类型:
JSC_TYPE_PARSE_ERROR: Bad type annotation. Unknown type Class.SomeObject
* @extends Class.SomeObject
在into closure compiler with ADVANCED_OPTIMIZATIONS下面粘贴以下代码:
// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level ADVANCED_OPTIMIZATIONS
// ==/ClosureCompiler==
(function($) {
"use strict";
var Class = {};
/**
* @constructor
*/
Class.ObjectA = function() {};
Class.ObjectA.prototype = {};
/**
* @constructor
* @extends Class.ObjectA
*/
Class.ObjectB = function() {};
Class.ObjectB.prototype = $.extend(new Class.ObjectA(), {
initialize: function() {}
});
window.test = new Class.ObjectB();
window.test.initialize();
})(jQuery);
答案 0 :(得分:6)
答案并不明显。您只需要在@const
命名空间中添加Class
。
/** @const */
var Class = {};
答案 1 :(得分:1)
最简单的,因为你将在提前模式下编译它无论如何也许是使用goo.provide并只链接base.js。然后显然你应该使用goog.inherits继承,因为高级模式了解基础.js功能比$ .extends好很多。
所以实现相同的代码看起来像这样:
// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level ADVANCED_OPTIMIZATIONS
// @use_closure_library true
// ==/ClosureCompiler==
goog.provide('Class.ObjectA')
/**
* @constructor
*/
Class.ObjectA = function() {};
goog.provide('Class.ObjectB');
/**
* @constructor
* @extends Class.ObjectA
*/
Class.ObjectB = function() {};
Class.ObjectB.prototype =
{
initialize: function() {}
}
goog.inherits(Class.ObjectB, Class.ObjectA);
window.test = new Class.ObjectB();
window.test.initialize();
在编译器ui中,你必须选择添加闭包库的选项,它将添加goog.base。
现在你的方法中还有几个jqueury样式foo,如(function($){})(jQuery);如果你开始使用高级编译路径,我会重新评估它的使用(我个人会重新使用jquery和封闭库,但我知道那些继续使用jquery和高级的人)。沿着高级模式我也会建议你看一下像plovr这样的构建系统。