Показать сообщение отдельно
  #204 (permalink)  
Старый 07.03.2015, 21:38
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Наткнулся тут на одну фичу, здесь, вроде, еще не было:

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
Ответить с цитированием