如何延长时刻js?

时间:2017-07-25 13:43:25

标签: javascript ecmascript-6 momentjs

我希望延长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对象。

1 个答案:

答案 0 :(得分:5)

您是否需要延长moment课程?您可以设置从工厂函数替换toJSON函数。

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

然后像通常使用moment

一样使用它
const json2 = {
    date: m2(),
};