簡體   English   中英

Javascript閉包:該數組不可以通過getArray編輯嗎?

[英]Javascript closures: Shouldn't this array not be editable via getArray?

目標1是只允許ARR信息經由被的getArray 得到
目標2是僅允許通過addToArray 設置 arr信息。

function TestObj(){
  var arr = [];
  var b = 3;

  this.getArray = function(){
    return arr;
  };
  this.addToArray = function(val){
    arr.push(val);
  };

  this.getNumber = function(){
    return b;
  }
  this.setNumber = function(val){
    b = val;
  }

}

var obj = new TestObj();

obj.addToArray('derp');
console.log(obj.getArray());

// [ 'DERP']

obj.getArray().push('aderp');

console.log(obj.getArray().length);

// 2

我糊塗了。 getArray不返回指向存儲在arr中的數組的指針,而不是arr本身嗎? 這是閉包101,我在某處忘記了()嗎?


思考過程:

因為
obj.getNumber()
返回3,


obj.setNumber(4)
其次是
obj.getNumber()
返回4

電話:
obj.getNumber()= 5
失敗,顯示“左手無效...”

既然如此,為什么

obj.getArray()推( '東西')

可以訪問數組...這是在函數中聲明的變量...這應該是閉包中的變量,只能通過getArray / addToArray api訪問...

您需要返回一個沒有引用原始數組的數組。

淺拷貝

this.getArray = function(){
    return arr.slice(0);
};

深拷貝

this.getArray = function(){
    return JSON.parse(JSON.stringify(arr));
};

如果要對數組進行只讀或只寫訪問而不必復制該數組,請將該數組封裝在一個對象中,並提供訪問該數組各個成員的讀寫功能。

對整個數組的引用未提供所需的訪問控制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM