Firefox中的Javascript类成员变空

时间:2013-04-30 12:07:16

标签: javascript firefox

我在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. 而且我不知道为什么它是空的以及如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

您的代码存在多个问题:

  1. 不要将数组用于任意键,值对。仅使用数组的数字键。
  2. 每个实例将共享相同的Attributes数组。这通常不是理想的行为。
  3. 解决方案:

    1. 改为使用对象。
    2. 正确设置继承并在子构造函数中调用父构造函数。
    3. 代码:

      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