我找不到与此问题类似的问题,如果有,请引导我了解情况。
我有以下代码片段:
var GUD = function() {
var all = [1,2,3,4,5];
return {
getAll : function() {
return all;
}
}
}();
因此,一个简单的函数隐藏了所有变量,并通过getAll方法公开了相同的变量。
为什么可以使用以下方法更改所有数组:
GUD.getAll() //[1, 2, 3, 4, 5]
GUD.getAll().splice(0,1) //[1]
GUD.getAll() //[2, 3, 4, 5]
谢谢
最佳答案
私有变量保护失败的一种极端情况是when returning the reference types(including arrays)
。与其返回对象的实际引用,不如返回对象的副本(在这种情况下为数组)。
我的评论前面有一个错字(应该是片状)
var GUD = function() {
var all = [1,2,3,4,5];
return {
getAll : function() {
return all.slice(0); // slice(0) creates a new copy of the array.
}
}
}();
关于javascript - JS:通过公开方法更改数据吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26011610/