gpt4 book ai didi

javascript - 数组作为 JavaScript 中 protected 对象属性

转载 作者:行者123 更新时间:2023-11-30 08:43:15 25 4
gpt4 key购买 nike

我正在尝试构建一个 JavaScript 构造函数,它具有一个数组作为具有只读访问权限的属性:

var Word = function() {
var _occurrences = [];
Object.defineProperties(this, {
"occurrences": {
get: function() {
return _occurrences;
}
},
"addOccurence": {
value: function(occ) {
_occurrences.push(occ);
}
}
});
};

数组本身是一个私有(private)变量,有一个 get-er 指向它。

var myWord = new Word();
myWord.addOccurrence(123);
var occ = myWord.occurrences;

一切正常。

myWord.occurrences = [];

被阻止,这是应该的。但令人惊讶的是,这有效:

myWord.occurrences.push(321);

保护一个属性可以防止它被新赋值,但不能通过 Array 方法进行写访问——即使它只能通过 getter 访问。这使得 Object.defineProperty() 对我来说毫无意义。

Object.freeze()/Object.seal() 不是一个选项,因为我的 addOccurrences() 方法需要写权限.

有什么想法吗?我是否忽略了什么?

最佳答案

JavaScript 只为您提供对对象(包括数组)的引用。当您返回 _occurrences 时,您返回了对数组的引用,因此您可以对其进行操作。

如果你想阻止这种情况,返回一个数组的副本。

return _occurrences.concat();

关于javascript - 数组作为 JavaScript 中 protected 对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24307897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com