10

亲爱的人们,我应该如何处理Closure Compiler输出的这些错误警告? 非常感谢你对你的想法和代码improtements这个特殊类型的错误:`不能实例化非构造函数Closure Compiler警告?

  1. JSC_WRONG_ARGUMENT_COUNT:功能parseInt函数:调用1个参数(S)。函数需要至少2个参数和不超过2个参数。在线路593字符12
    if (parseInt(jQuery.browser.version) < 7) {

  2. JSC_NOT_A_CONSTRUCTOR:在线路708字符不能实例非构造15
    lightbox = new Lightbox(this, opts.lightbox);

  3. JSC_NOT_A_CONSTRUCTOR:在线路1265字符不能实例非构造19
    var scroller = new Scroller($(this), opts);

回答

18

编号1:
此警告意味着您在函数调用中传递了错误数量的参数。

Here是一个更好的解释

2号& 3:
编译器期望所有构造函数被打上标签JSDoc @constructor,就像这样:

/** 
* @constructor 
*/ 
function MyClass() { 
    this.foo = 'bar'; 
} 
var obj = new MyClass(); 
alert(obj.foo); 

Here是更好的解释。

+0

那么你会怎么做,如果代码是由第三方提供的库已被混淆? – AndroidDev 2017-05-31 09:57:30

+0

这是一个艰难的,我的朋友。除了Ye Olde“猜测”,你别无选择。使用断点和查询对象属性...猜猜它们是什么并测试结果 - 祝您好运 – 2017-05-31 15:22:11

3

对于第一个,它希望你传递两个参数给parseInt:value和radix。对于10为基础的数字(这是你的情况下),你需要(并不真的需要,但它要你)调用

parseInt(jQuery.browser.version, 10) 
+0

您不*指定第二个参数,但您应该:“虽然此参数是可选的,但始终指定它可以消除读者的困惑并保证可预测的行为。当不指定基数时,不同的实现会产生不同的结果。“ https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt – 2011-03-14 17:38:52

+0

@lwburk:我没有说你必须指定两个参数,我说闭包编译器希望你 - 这就是它的抱怨。请删除您的投票。 – Andrey 2011-03-14 19:17:15

+1

+1为了反击丑恶downvote – Paulpro 2012-05-20 02:56:42

相关问题