0

オブジェクト内にプライベート配列を作成したいと考えています。問題は、arrCopy で obj.arr をコピーしていることですが、obj.arr のみを参照しているようです。これは、コードをさらに実行すると短くなる obj.arr に影響を与えるため、スプライスすると問題が発生します。

これは、コードの例を含むコードペンです。

これが懸念のjavascriptです

var obj = {
  min: 3,
  max: 9,
  // I want the array to be private and never to change.
  arr : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
  inside: function(){
    // I want this variable to copy the arrays values into a new array that can be modified with splice()
    var arrCopy = this.arr;
      console.log('obj.arr: ' + this.arr);
      console.log('arrCopy: ' + arrCopy);
    // I want to be able to splice arrCopy without affecting obj.arr so next time the function is run it gets the value of obj.arr again
    var arrSplit = arrCopy.splice(arrCopy.indexOf(this.min), (arrCopy.indexOf(this.max) - arrCopy.indexOf(this.min) + 1));
    console.log('arrSplit: ' + arrSplit);
    console.log('obj.arr: ' + this.arr);
  }
}

//to run un-comment the next line
//obj.inside();

助けてくれてありがとう、

よろしく、

アンドリュー

4

1 に答える 1

3

Javascript でオブジェクトまたは配列を割り当てると、元の配列またはオブジェクトへの参照がコピーされるだけで、内容はコピーされません。配列のコピーを作成するには、次を使用します。

var arrCopy = this.arr.slice(0);
于 2013-10-05T07:09:25.483 に答える