2

因此,调试似乎有了新的意义,至少在 Closure Compiler 中是这样。

我有一个相当大的代码库,隔离问题是一项艰巨的任务。在我的入口点类中,我实例化了依赖项。其中之一,未正确创建,对象存在,但未调用其构造函数。

这只发生在高级模式下,所以我尝试传递 --debug 标志,瞧,错误消失了,构造函数被调用。真是令人兴奋。我不能复制粘贴任何特定的代码,你有什么建议?

/**
 * @param {Element} parent
 * @param {Object}  opts
 * @constructor
 */
ns.App = function(parent, opts) {
    this.options = new ns.Options(opts || {});

    var w = this.options.width || parent.offsetWidth;
    var h = this.options.height || parent.offsetHeight;
    this.view = new ns.AppView(w, h);
    this.history = new ns.CommandManager();

    // ....

    // this one doesn't get called
    this.amx_ = new ns.ActivityManager(this, this.options);
    // this one does
    this.output_ = new ns.Writer();
    this.bind_();
};
4

1 回答 1

2

使用闭包编译器,当调试标志使错误消失时,通常表明您有重命名冲突。这可能是由于在外部定义的对象上设置属性而导致的,该对象的属性未完全定义给编译器。编译器将您的属性重命名为与现有属性相同的名称。

这也可能是由于使用点分语法 ( obj.prop) 引用属性而导致的,该属性是使用带引号的语法 ( obj['prop']) 声明的。根据定义,编译器将这些视为不同的属性。

确保打开--warning_level VERBOSE以帮助识别访问未定义的属性。尽管您的特定案例仍有可能无法识别。

于 2012-08-31T13:51:09.657 回答