2016-01-21 16 views
6
class Event extends Immutable.Record { 
    constructor(text) { 
    super({text: text, timestamp: Date.now()}); 
    } 
} 

Calling new Event() sembra tornare una funzione constuctor:Come costruire sottoclassi di Immutable.Record?

new Event('started').toString() 

"funzione di registrazione (valori) {if (valori instanceof RecordType) {return valori;}

if ((! questa istanza di RecordType)) {return new RecordType (values);}

if (! hasInitialized) {hasInitialized = true; var keys = Object .keys (defaultValues); SetProps (RecordTypePrototype, chiavi); RecordTypePrototype.size = keys.length; RecordTypePrototype._name = nome; RecordTypePrototype._keys = keys; RecordTypePrototype._defaultValues ​​= defaultValues;}

this._map = Mappa (valori);} "

Mentre chiamando la funzione restituisce i risultati attesi:

new Event('started')().toString() 

" Record { "testo": "avviato", "timestamp": 1453374580203} "

Cosa devo fare? sbagliato?

risposta

12

Immutable.Record "Creates a new Class which produces Record instances.", In altre parole è una funzione in sé che consente di passare le chiavi consentite e restituisce una classe che è possibile estendere;

class Event extends Immutable.Record({text:'', timestamp:''}) { 
    constructor(text) { 
    super({text: text, timestamp: Date.now()}); 
    } 
} 

> new Event('started').toString() 
Event { "text": "started", "timestamp": 1453376445769 } 
+0

Questa è un'ottima risposta, ma vorrei poterlo fare in JS semplice, pronto per il browser (e, pronto per IE)! – rmosolgo

+0

@mosolgo Puoi sempre traspondere il codice da ES6 ad alcuni vecchi gusti di javascript. Può f.ex. prova online repl di babel su https://babeljs.io/repl/ –

+1

E se volessi ampliare ulteriormente la classe 'Event' avendo una versione più specifica? Qualcosa come un 'HttpEvent' che ha una proprietà URL o qualcosa del genere. Posso semplicemente estenderlo come normale? – jktravis