【发布时间】:2014-08-10 01:38:03
【问题描述】:
我正在尝试构建一个 JavaScript 构造函数,该构造函数将数组作为具有只读访问权限的属性:
var Word = function() {
var _occurrences = [];
Object.defineProperties(this, {
"occurrences": {
get: function() {
return _occurrences;
}
},
"addOccurence": {
value: function(occ) {
_occurrences.push(occ);
}
}
});
};
数组本身是一个私有变量,有一个 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 arrays protected