2017-07-25 6 views
3

moment.jsを拡張して、それをtoJSON関数より優先したいと思います。モーメント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"} 

私の問題は、この場合には、私はnewなしm2()を呼び出すことはできません、ということです。

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

newキーワードを指定せずに、それを呼び出す機能を維持しながら、どのように私はmomentを拡張することができますか?

オーバーライドmoment.prototype.toJSONは、デフォルトのmomentオブジェクトをコードの別の場所で使用したいので、オプションではありません。

+0

を使用するよう

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

そして、それを使うのか? –

答えて

5

momentクラスを拡張する必要がありますか?ファクトリ関数からtoJSON関数を置き換えるように設定できます。あなたは通常、あなたがこれを達成するためのヘルパー関数を使用していないのはなぜmoment

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

m2関数の 'return'ステートメントを見逃しませんでしたか? –

+0

私は確かにやった - 今修正! –

関連する問題