2016-07-05 8 views
2

In Javascript (ES6), habe ich einen Baum von geerbten Klassen definiert:klonen ein Objekt aus dem Vorfahr

class A { 
    constructor() { 
    (...) 
    } 
} 

class B extends A { 
    constructor() { 
    (...) 
    super(); 
    } 
} 

class C extends B { 
    constructor() { 
    (...) 
    super(); 
    } 
} 

Und so weiter (eine Klasse D erstreckt sich zu B usw.).

Jetzt, in A, möchte ich eine Funktion resolve schreiben, die das aktuelle Objekt klonen und nur einige seiner Felder ändern.

Ist es möglich, den geschachtelten geerbten Konstruktor von A zu erhalten?
Zum Beispiel, wenn ich ein C bin, ist es möglich, ein neues C von resolve zu schaffen?

Andernfalls ist es möglich, mit allen Funktionen zu klonen this werden definierten Eigenschaften in den vererbten Klassen?

Antwort

2

Versuchen Sie es mit this.constructor:

class A { 
 
    foo() { return new (this.constructor) } 
 
} 
 

 
class B extends A { 
 
    jj() { console.log('jj') } 
 
} 
 

 
(new B).foo().jj()

+1

Hooo, kann es nicht so einfach sein! Danke, du hast meinen Tag gemacht :) – Guid

Verwandte Themen