我找不到与此问题类似的问题,如果有,请引导我了解情况。
我有以下代码片段:

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/

10-10 16:57