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

function pluralParent(...parents) {
    let DerivativeParent = function() {
        for (let Parent of parents) {
            Object.assign(this, new Parent());
        }
    };
    
    DerivativeParent.prototype = new Proxy(DerivativeParent.prototype, { //Наследование свойств прототипа
        get: (target, name) => {
            if (target[name]) {
              return target[name];
            }
            
            for (let Parent of parents) {
                if (name in Parent.prototype) {
                    return Parent.prototype[name];
                }
            }
        }
    });
    
    DerivativeParent = new Proxy(DerivativeParent, { //Наследование статичных свойств класса
        get: (target, name) => {
            if (target[name]) {
              return target[name];
            }
            
            for (let Parent of parents) {
                if (name in Parent) {
                    return Parent[name];
                }
            }
        }
    });
    
    return DerivativeParent;
}

class Cat {
    constructor() {
        this.isACat = true;
    }
    
    meow() {
        console.log("meow");
    }
}

class Dog {
    constructor() {
        this.isADog = true;
    }
    
    bark() {
        console.log("woof");
    }
}

class CatDog extends pluralParent(Cat, Dog) {}

let catDog = new CatDog();

catDog.meow();
catDog.bark();
console.log(catDog);


Затестить можно в babel repl в последнем файрфоксе.

Последний раз редактировалось Erolast, 23.07.2015 в 19:59.
Ответить с цитированием