2016-10-13 2 views
1

Кто-нибудь знает, как получить все свойства унаследованного класса и поместить текущие свойства только в один объект с ES6?Скопируйте унаследованный класс в другой в ES6

export class MainClass { 

    constructor(classInstance) {} 

    myMethodMain { 
    //doSomhethig 
    } 
} 

файл 2

class Another extends MainClass { 

    constructor(config) { 
     this.name = 'testing'; 
    } 

    myMethodAnother { 
    //doSomhethig 
    } 
} 

файл 3

class RandomClass { 
    constructor() { 
     this.name = 'test'; 
    } 
    myMethodRamdonChild { 
    //doSomhethig 
    } 
} 

файл 3

class RandomChild extends RandomClass { 
    myMethodRamdonChild { 
    //doSomhethig 
    } 
} 

export const myMainClass = new Another(new RandomChild()); 

Мне нужно, чтобы в конструкторе моего MainClass скопировали все свойства из RandomChild и суперкласса RandomClass и сохранили текущие свойства из моего текущего класса. В финале мне нужен объект со всеми подобными свойствами.

newObject{ 
    myMethodMain { 
    //doSomhethig 
    } 
    myMethodAnother { 
    //doSomhethig 
    } 
    myMethodRamdonChild { 
    //doSomhethig 
    } 
    myMethodRamdonChild { 
    //doSomhethig 
    } 
} 

Я пытался использовать (_.merge, _.copy, angular.copy, angular.merge, $.merge, Object.assign, Object.merge) и другие методы.

Важно: Я не могу изменить свою текущую структуру

+0

Пожалуйста, примите правильный ответ вместо того, чтобы изменить название в 'solved'. Разрешено самопринятие – DarkBee

ответ

1

я решить мою проблему с этим.

export const bind = (target) => (obj) => isFunction(target) ? target.bind(obj) : target; 

export const pack = (keys) => (obj) => keys.reduce((res, key) => Object.assign(res, {[key]: bind(obj[key])(obj)}), {}); 

export const getAllProperties = (o) => { 
    let results = []; 

    function properties(obj) { 
     let props, i; 
     if (obj == null) { 
      return results; 
     } 
     if (typeof obj !== 'object' && typeof obj !== 'function') { 
      return properties(obj.constructor.prototype); 
     } 
     props = Object.getOwnPropertyNames(obj); 
     i = props.length; 
     while (i--) { 
      if (!~results.indexOf(props[i])) { 
       results.push(props[i]); 
      } 
     } 
     return properties(Object.getPrototypeOf(obj)); 
    } 

    return properties(o); 
}; 

Object.assign(self, pack(getAllProperties(jmi))(jmi)); 

self имеет все свойства из моих классов :)

+1

Вместо 'obj.constructor.prototype' вы действительно хотите' Object.getPrototypeOf (Object (obj)) ' – Bergi

Смежные вопросы