我想扩展 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"}
我的问题是,在这种情况下,如果没有 new
,我无法调用 m2()
:
const json3 = {
date: m2(), // TypeError: Class constructor m2 cannot be invoked without 'new'
};
如何在不使用 new
关键字的情况下扩展 moment
并保持调用它的能力?
重写 moment.prototype.toJSON
不是一个选项,因为我想在代码的其他地方使用默认的 moment
对象。
最佳答案
您是否需要扩展 moment
类?您可以设置替换工厂函数中的 toJSON
函数。
function m2(data) {
const original = moment(data);
original.toJSON = function() {
return 'STR';
}
return original;
}
然后像平常一样使用它 moment
const json2 = {
date: m2(),
};
关于javascript - 如何扩展 moment js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45305189/