2017-09-21 3 views
0

EDIT: Ich habe einige Fortschritte bei der Suche nach dem Problem gemacht. Wenn er in der Configuration-Klasse super() aufruft, nimmt er keine Werte an, egal, was ich ihm zuführe.Klasse weigert sich, Werte zu übernehmen

Ich versuche, die Configuration-Klasse zu laden, aber wenn ich versuche, ihre Werte zu protokollieren es kommt einfach als Configuration {}, auch wenn require("util").inspect() hrsg.

in config.js, Klasse Konfiguration

class Configuration extends Object { 
    constructor(path, app) { 
    super(_.config); 
    _.path = path; 
    try { 
     _.config = reload(path); 
     console.log(_.config); 
    } catch(err) { 
     this.setup(() => { 
     _.config = reload(path); 
     }, (err) => app.logger.critical); 
    } 
    } 

... 

} 

Hier ist, wie ich es instanziieren:

in application.js, Klasse Anwendung

this.config = new Config(this.root + "/config.json", this); 
logger.debug(`Config instantiated`, `values = ${require("util").inspect(this.config)}`); // prints "DEBUG • Config instantiated • values = Configuration {}" 
+0

Wo ist '' 'Config''' Klasse? – Wainage

+0

Haben Sie versucht, irgendwelche [Optionen zu inspizieren()] (https://nodejs.org/api/util.html#util_util_inspect_object_options) zu übergeben? like showHidden –

+0

@Wainage 'Config' ist der Name, den ich importiert habe, wenn ich" config.js "benötige – ffxhand

Antwort

0

I ended herauszufinden, eine Lösung für dieses Problem. Während Jeff M in den Kommentaren darauf hinwies, dass es sich um einen V8-Bug gehandelt haben könnte, handelt es sich tatsächlich um die ECMAScript-Spezifikation.

Die Hauptänderung ist, dass ich bin nicht länger Object verlängert.

Hier ist das Konzept, das ich auf gelandet: (Code ist stark abgespeckte und vereinfacht)

let inherit = { foo: "bar", baz: 4 }; 

class TestClass { 
    constructor() { 
    this.test = "thing"; 
    // this = TestClass { 
    //   test: "thing" } 

    Object.assign(this, inherit); 
    // this = TestClass { 
    //   test: "thing", 
    //   foo: "bar", 
    //   baz: 4 } 
    } 
} 
Verwandte Themen