2016-09-26 8 views
0

は、例として次のクラスを取る移入されません:私はpopulateArrayメソッドを呼び出すと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; 
     } 
    } 
    }; 
} 

、期待どおりに動作しますが、それはtestArrayプロパティを変更しません。

私は、このメソッドを抜き出してプロトタイプで追加しようとしましたが、これも機能しません。

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

メソッドを呼び出しているコードはここにある:

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

メソッドはプロパティに移入されていないのはなぜ?

+7

配列にデータが入力されているかどうかをどのようにテストしますか?問題はおそらく配列要素ではなく、配列に任意のプロパティを追加していることでしょう。配列の代わりにオブジェクトを使うべきだと思われます。私。 'var foo = []; foo.bar = 42; 'foo.bar'は配列要素と見なされないので' foo.length; 'は' 0'になります。このような混乱を避けるためには、配列の代わりにオブジェクト(またはより良い: 'Map')を使用してください。 –

+2

_array_を使用していますが、_ objectプロパティ_を設定しています。 JavaScript内の配列はインデックス番号のみです。文字列キー(たとえば、他の言語ではハッシュと呼ばれるもの)を使用する場合は、オブジェクト{'}'を使用する必要があります。配列上にランダムなプロパティを設定することはできますが、それは決して形にならないか、「公式」なので、_bad practice_です。 – vlaz

+0

そのメソッドを呼び出した後、配列がどのように見えると思われましたか? – trincot

答えて

0

配列要素はインデックスを使用して格納されます。 '1-2'は、アレイは、それが配列オブジェクトのプロパティとして格納さindex.Hereないので

ここ
var arr = []; 

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

arr.lengthはゼロとなります。

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 
     } 
    } 
    }; 
} 
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ランニング。

関連する問題