【发布时间】:2014-09-24 02:12:26
【问题描述】:
我有一个关于 JS 的小问题。它类似于这篇文章:@ADC 的here,但有一点需要注意。
在他的代码中,他创建了一个 java 脚本对象:
var AssocArray = function(){
var collection = new Object();
this.add = function(id, o){
collection[id] = o;
}
this.remove = function(id){
delete collection[id];
}
this.getById = function(id){
return collection[id];
}
this.get = function(){
var res = collection;
return res;
}
}
这与我需要做的事情非常接近。他的问题是为 get() 访问器创建一个只读属性,他通过克隆集合私有变量来解决这个问题。
我的问题是我不想只创建一个克隆。我需要将单个元素提供给消费者,但防止他们从 get() 成员返回的数组中添加任何新元素。相反,他们应该使用 add(id, o) 成员来添加新项目,而不是选择向 get() 返回的克隆添加新内容。
这可能吗?是否可以只创建或返回集合变量的迭代器,以防止用户修改数组而不是使用添加/删除成员?
【问题讨论】:
-
我想不出任何本机“迭代器”,但您可以创建自己的“迭代器”类。你也可以
slice()私人收藏(浅拷贝),但这并不能修复深度引用。
标签: javascript arrays private-members