Closure编译器--debug解决了我的bug

时间:2012-08-31 12:38:28

标签: javascript google-closure-compiler

所以看起来调试正在获得新的含义,至少在Closure Compiler中是这样。

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

这只发生在ADVANCED模式,所以我试图传递--debug标志,瞧,bug已经消失,构造函数被调用。这令人兴奋。我无法复制粘贴任何特定代码,你会建议什么?

/**
 * @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_();
};

1 个答案:

答案 0 :(得分:2)

使用Closure-compiler,当调试标志使错误消失时,通常表示您有重命名冲突。这可以通过在外部定义的对象上设置属性来导致,该对象的属性未完全定义到编译器。编译器将您的属性重命名为与现有属性相同的名称。

这也可以通过使用带有语法(obj.prop)声明的语法引用属性引起。根据定义,编译器将这些视为不同的属性。

确保打开obj['prop']以帮助识别访问未定义的属性。虽然您的特定情况仍有可能无法识别。