我在JS中有一个带有字段
的类Widget = function ()
{
this.Attributes = []; // key=value
}
和另一个来自Widget
BusinessStatisticWidget = function ()
{
// some code
};
BusinessStatisticWidget.prototype = new Widget();
在初始化阶段,我已经为此属性字段分配了值(仅一次),并且在某些时候,Atttibutes字段变为空:
BusinessStatisticWidget.prototype.SetEventsOnControls = function ()
{
var dropDown = document.getElementById(this.DropDownName + this.type + "Id");
var _this = this; // **Not empty here**
dropDown.addEventListener("change", function (event)
{
// **Not empty even here**
_this.CalculateAndSetTimeRangeForTimeSpan(event.target.value);
}, false);
}
BusinessStatisticWidget.prototype.CalculateAndSetTimeRangeForTimeSpan = function (val)
{
// **Empty here**
if (this.Attributes["fromDate"].value != '' && this.Attributes["toDate"].value != '')
{}
}
上面的代码在Chrome和IE10中工作得很好(我的意思是数组不是空的)但是在Firefox(20.0.1)中不起作用
由于数组为空,我得到TypeError: this.Attributes.fromDate is undefined.
而且我不知道为什么它是空的以及如何解决这个问题。
答案 0 :(得分:1)
您的代码存在多个问题:
Attributes
数组。这通常不是理想的行为。解决方案:
代码:
Widget = function () {
this.Attributes = {}; // use an pbject
};
var BusinessStatisticWidget = function () {
// call parent constructor
Widget.call(this);
// some code
};
// set up inheritance
BusinessStatisticWidget.prototype = Object.create(Widget.prototype);
关于Object.create
的更多信息(和polyfill)。
现在,我不知道这是否可以解决您的问题,但它使您的代码至少更加正确,以便更容易找到问题。我建议learn how to debug JavaScript。