クラス プロパティをプライベートに設定したいので、WeakMap を使用しましたが、WeakMap は 1 つだけでした。アイテムの作成後、最後のオブジェクト データのみを取得し、以前のデータは削除されます...
これは私のコード定義です:
const Item = (() => {
const weakMap = new WeakMap();
const _id = {};
const _text = {};
class Item {
constructor({id, text}) {
weakMap.set(_id, {id});
weakMap.set(_text, {text});
}
getId() {
return weakMap.get(_id).id;
}
getText() {
return weakMap.get(_text).text;
}
}
return Item;
})();
ここでは、すべてのアイテムを含む配列を作成します。
const items = myItems.map(item => {
const newItem = new Item(item);
console.log('new item created, id: ' + newItem.getId());
return newItem;
});
アイテムはよく作成されています。
new item created, id: 1
new item created, id: 2
new item created, id: 3
new item created, id: 4
しかし、アイテムを反復すると、次のようになります。
items.forEach(element => console.log(element.getId() + ' ' + element.getText()));
4 Fourth description
4 Fourth description
4 Fourth description
4 Fourth description
これは実際の例です: https://plnkr.co/edit/pFCOcCVl1AQEJqSKvfVX
また、クロージャーでは機能しません:
const Answer = (() => {
const weakMap = new WeakMap();
const _id = {};
const _text = {};
class Answer {
getId;
getText;
constructor({id, text}) {
weakMap.set(_id, {id});
weakMap.set(_text, {text});
this.getId = () => weakMap.get(_id).id;
this.getText = () => weakMap.get(_text).text;
}
}
}