我的显示模块中有以下代码,但我不确定如何声明/定义imageListItem
,这严格来说是一个 DTO,并不需要隐藏任何信息。我是否正确定义了这个对象?
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()
几乎可以通过防止添加或删除属性来实现这一点,但它也可以防止更改属性。
例如我想要这个:
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
}
我不想要这个:
// Now any changes will fail
function fail(){
'use strict';
obj.foo = 'sparky'; // throws a TypeError
}
你看?我想freeze
防止quaxxor
被添加到obj
,但我不希望它阻止我更改 的值foo
。