我希望延长moment.js
,以覆盖它的toJSON
功能。
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"}
我的问题是,在这种情况下,如果没有m2()
,我就无法拨打new
:
const json3 = {
date: m2(), // TypeError: Class constructor m2 cannot be invoked without 'new'
};
如何在不使用moment
关键字的情况下保留调用它的能力的同时扩展new
?
覆盖moment.prototype.toJSON
不是一个选项,因为我想在代码中的其他位置使用默认的moment
对象。
答案 0 :(得分:5)
您是否需要延长moment
课程?您可以设置从工厂函数替换toJSON
函数。
function m2(data) {
const original = moment(data);
original.toJSON = function() {
return 'STR';
}
return original;
}
然后像通常使用moment
const json2 = {
date: m2(),
};