[英]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.