Javascript方法没有填充方法(数组)

时间:2016-09-26 18:18:19

标签: javascript

以下面的课程为例:

function TestClass() {

  // public property
  this.testArray = [];

  // public function
  this.populateArray = function() {
    for (var y = 1; y <= 9; y++) {
      for (var x = 1; x <= 12; x++) {
        this.testArray[x + '-' + y] = true;
      }
    }
  };
}

当我调用populateArray方法时,它会按预期运行,但不会修改testArray属性。

我试过把方法拉出来并通过原型添加它,但这也行不通。

TestClass.prototype.populateArray = function() {};

调用该方法的代码在这里:

var testClass = new TestClass();
testClass.populateArray();

为什么方法没有填充属性?

3 个答案:

答案 0 :(得分:0)

使用索引存储数组元素。

var arr = [];

arr[1 + '-' + 2] = 2;

这里arr.length将为零,因为'1-2'不是数组索引。这是一个存储为数组对象的属性。

答案 1 :(得分:0)

您分配数组的方式存在一些问题,请参阅说明的注释:

function TestClass() {

  this.testArray = [];


  this.populateArray = function() {
    for (var y = 0; y < 9; y++) {
      this.testArray.push([]); //Create 9 arrays
      for (var x = 0; x < 12; x++) {
        this.testArray[y].push([]); //Create 12 arrays for every 'y' array
        this.testArray[y][x] = true; //You were using a string to access an array value. You can only do that with objects
      }
    }
  };
}

答案 2 :(得分:0)

以下是您想写的内容:

function TestClass() {

  // public property
  this.testArray = {}; // <-- Object!
  var self = this;     // Saving this (the context) of TestClass

  // public function
  this.populateArray = function() {
    for (var y = 1; y <= 9; y++) {
      for (var x = 1; x <= 12; x++) {
        self.testArray[x + '-' + y] = true; // Using self
      }
    }
  };
}

同时here it is正在运行。