Наткнулся тут на одну фичу, здесь, вроде, еще не было:
let room = new Room();
let character = new Character({room});
assert.equal(character.room, room);
room.destroy();
assert.isNull(character.room);
assert.isNull(room); //!!!
И даже кодить ничего не надо:
const revoke = Symbol();
class Model {
constructor() {
let {
proxy,
revoke: revokeHandler
} = Proxy.revocable(this, {});
this[revoke] = revokeHandler;
return proxy;
}
destroy() {
this[revoke]();
}
}
class Character extends Model {
constructor(room) {
super();
Object.assign(this, {
room
});
}
}
class Room extends Model {}
https://people.mozilla.org/~jorendor...roxy.revocable