我在揭示模塊中有以下代碼,但我不確定如何聲明/定義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()
通過防止添加或刪除屬性幾乎可以實現這一點,但它也可以防止屬性發生變化。
E.g.我想這一點:
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
的值。
如果你不需要任何信息隱藏(或邏輯),爲什麼你把它作爲一個訪問器屬性?只要使用'this.title = undefined;'。 – Bergi 2014-12-13 12:38:35
(不知道這是你正在尋找的整個答案) – Bergi 2014-12-13 12:39:13
@Bergi,它可能是接近。我只是不知道如何聲明一個未初始化的變量。 – ProfK 2014-12-13 13:39:09