2017-07-25 2 views
3

Ich möchte moment.js erweitern, um seine toJSON Funktion zu überschreiben.Wie zu verlängern Moment js?

const moment = require('moment'); 

class m2 extends moment { 
    constructor(data) { 
     super(data); 
     this.toJSON = function() { 
      return 'STR'; 
     }; 
    } 
} 

const json = { 
    date: moment(), 
}; 

const json2 = { 
    date: new m2(), 
}; 

console.log(JSON.stringify(json)); // {"date":"2017-07-25T13:36:47.023Z"} 
console.log(JSON.stringify(json2)); // {"date":"STR"} 

Mein Problem ist, dass in diesem Fall, den ich nicht m2() ohne new anrufen:

const json3 = { 
    date: m2(), // TypeError: Class constructor m2 cannot be invoked without 'new' 
}; 

Wie kann ich es moment verlängern während der Fähigkeit zu nennen, ohne das new Stichwort?

Überschreiben moment.prototype.toJSON ist keine Option, weil ich das Standardobjekt moment an anderer Stelle im Code verwenden möchte.

+0

verwenden würden, warum Sie keine Hilfsfunktion verwenden, um dies zu erreichen? –

Antwort

5

Müssen Sie die Klasse moment überhaupt erweitern? Sie könnten die Funktion toJSON durch eine Werksfunktion ersetzen.

function m2(data) { 
    const original = moment(data); 
    original.toJSON = function() { 
     return 'STR'; 
    } 
    return original; 
} 

verwenden Sie es dann wie gewohnt moment

const json2 = { 
    date: m2(), 
}; 
+4

Haben Sie die "Return" -Anweisung Ihrer m2-Funktion nicht übersehen? –

+0

habe ich sicher - jetzt behoben! –