내 공개 모듈 안에 다음과 같은 코드가 있지만 정확히 선언하지 않는 방법이 있습니다. 정확히 DTO이고 아무 정보도 숨길 필요가 없습니다. imageListItem
을 선언/정의하는 방법이 불확실합니다. 이 개체를 올바르게 정의하고 있습니까?고정 된 구조의 객체를 만들려면 어떻게해야합니까?
var imageListItem = function() {
var _title;
Object.defineProperty(this, "title", {
get: function() { return _title; },
set: function (value) { _title = value; }
}
);
};
var imageList = (function() {
var buffer = new CBuffer();
return {
populate: function (listItems) {
buffer.push(listItems);
},
rotate: function() {
buffer.rotateLeft();
}
}
})();
imageListItem
으로 나중에 사용할 수 있도록 개체 구조를 선언하고 싶습니다. 그 선언은 논리적으로 객체가 나중에 어떻게 사용될 것인지에 의존해서는 안됩니다. 즉, 우연히 imageListItem
에 새 속성을 동적으로 할당하거나 속성을 삭제하지 않는 것을보고 싶지 않습니다. 속성에 대한 모든 할당은 객체에서 이미 선언 된 속성에만 엄격하게 적용되어야합니다.
Object.freeze()
은 속성이 추가되거나 제거되는 것을 막음으로써 거의 달성되지만 속성이 변경되는 것을 방지합니다.
예 :
// Now any changes will fail
function fail(){
'use strict';
obj.foo = 'sparky'; // throws a TypeError
}
당신은 참조 :이 원하는 '해달라고
var obj = {
prop: function() {},
foo: 'bar'
};
// New properties may be added, existing properties may be changed or removed
obj.foo = 'baz';
obj.lumpy = 'woof';
var o = Object.freeze(obj);
// Now any changes will fail
function fail(){
'use strict';
obj.delete(foo); // throws a TypeError
obj.quaxxor = 'the friendly duck'; // throws a TypeError
}
:이 원하는? freeze
이 이 obj
에 추가되는 것을 막으려 고합니다.하지만 foo
값을 변경하지 못하게하고 싶습니다.
정보 숨기기 (또는 논리)가 필요없는 경우 왜 접근 자 속성을 사용합니까? 그냥'this.title = undefined; '를 사용하십시오. – Bergi
(그 답이 찾고있는 것이 확실하지 않은 경우) – Bergi
@Bergi, 아마도 가까운 것 같습니다. 방금 초기화되지 않은 변수를 선언하는 방법을 알지 못했습니다. – ProfK