所以看起来调试正在获得新的含义,至少在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_();
};
答案 0 :(得分:2)
使用Closure-compiler,当调试标志使错误消失时,通常表示您有重命名冲突。这可以通过在外部定义的对象上设置属性来导致,该对象的属性未完全定义到编译器。编译器将您的属性重命名为与现有属性相同的名称。
这也可以通过使用带有语法(obj.prop
)声明的语法引用属性引起。根据定义,编译器将这些视为不同的属性。
确保打开obj['prop']
以帮助识别访问未定义的属性。虽然您的特定情况仍有可能无法识别。