JS에 관해서는 작은 질문이 있습니다. 이 게시물과 유사합니다 : @ADC의 here, 작은주의 사항이 있습니다.자바 스크립트의 읽기 전용 컬렉션 또는 반복자
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() 멤버가 반환 한 배열에서 새로운 요소를 추가하지 못하게하는 것입니다. 대신 get()에 의해 반환 된 복제본에 새 항목을 추가하는 옵션 대신에 add (id, o) 멤버를 사용하여 새 항목을 추가해야합니다.
그게 가능합니까? 추가/제거 멤버를 사용하는 것 이외의 다른 사용자가 배열을 수정할 수 없도록 컬렉션 변수의 반복자를 만들거나 반환 할 수 있습니까? 당신이 ES6 반복자를 사용할 수, 재설정을위한 다른 적절한 반복자 기계, 탐지 말과 함께
this.iterator = function() {
var n = 0;
return {
next: function() { return collection[n++]; }
};
}
등
또는 :
네이티브 "iterator"를 생각할 수는 없지만 직접 "iterator"클래스를 만들 수는 있습니다. 개인 컬렉션 (얕은 복사본)도'slice() '할 수 있지만 깊은 참조는 수정하지 않습니다. – Ian