function Queue(maxSize) {

    var array = []; //should be like-private

    this.addForSomeTime = function(el) {
        if (array.length === maxSize) {
            return false;
        }
        array.push(el);
        return true;
    }

    this.getArray = function() {
        return array;
    }
}


问题在这里:

var q = new Queue(4);
q.addForSomeTime(0);
q.addForSomeTime(0);
var ar = q.getArray();


ar等于[0,0]。而且,如果我要调用ar.push(1),我也将其推送到q中的“ private”字段中。如何避免这种情况,并从外部操作中保存“私有”字段?也许存在一种返回值但不引用数组的方法?

最佳答案

您始终可以返回数组的副本:

return array.slice();


但是,那只是一个浅表副本,因此数组内的对象仍然可以突变。

也许看一下immutable-js以获得更多选项。

关于javascript - JavaScript中的安全返回专用字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27456973/

10-12 07:39
查看更多