我有一些JS"对象"我正在使用一些复杂的东西。因此,以下代码被简化为所需的最小信息:
function AttributeWrapper(model) {
var self = this;
var attributeModel = model;
self.labelPrimitive = null;
self.mandatorySignPrimitive = null;
self.documentationPrimitive = null;
self.valuePrimitive = null;
self.isHidden = function() {
return false;
}
}
function Primitive(model, wrapper) {
var self = this;
var groupingObject = wrapper;
self.model = model;
self.layoutCell = null;
self.render = function() {
if (self.isHidden()) {
return;
}
self.layoutCell.getDomElement().innerHTML = self.model.id || "TODO";
}
self.isHidden = function() {
return groupingObject.isHidden();
}
}
这个对象主要用于:
function AnOtherObject {
var self = this;
self.anyFunction = function() {
var wrapper = new AttributeWrapper(model);
var primitive = new Primitive(anOtherKindOfModel, wrapper);
var isHidden = primitive.isHidden();
}
}
出于任何原因,第一次通话正常。所以在Primitive" class"中的功能调用并且范围正确(变量按预期设置)。此外,Primitive类对其包含的对象(AttributeWrapper的实例)的调用也起作用,但是上下文混乱了。我希望我可以在" isHidden"中访问像attributeModel这样的实例变量。功能,但他们不再存在。也是"自我"不是实例,而是其他东西(看起来像全球"文档"或"窗口"实例),但是"这个"逆转到实例...... 在对象的声明中有什么我做错了吗?我不明白为什么第一个对象的调用有效,但是子对象是有线的......
答案 0 :(得分:0)
问题似乎已经解决了......
我正在使用visual studio进行调试。 "返回false" " isHidden"编写AttributeWrapper中的函数是为了放置断点并继续写入此函数的代码(以查看调试器中的对象及其字段)。当断点被击中时,我遇到了描述问题。
今天我和一位同事一起看了一下,他的想法是,调试器可能会以某种方式混淆并且没有显示正确的状态。 所以我完成了代码并再次开始调试。突然,当断点被击中时,状态是正确的。 所以似乎问题真的是一个混乱的调试器和everthing工作正常。通过使用函数中的上下文中的某些东西,这种混乱似乎得到了解决......
经验教训:视觉工作室可能不是调试javascript =)的最佳选择。