公開モジュール内に次のコードがありますが、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