扩展JavaScript功能

时间:2018-04-13 16:15:57

标签: javascript function class prototype extend

有没有办法将下面的代码作为类扩展函数?如果不是有更好的方法吗?我想要使用除标准vanilla JavaScript 之外的任何东西

Function.prototype._data = new Map();

function TEMP (key) { return TEMP._data.get(key) }
TEMP.remove = function(id) { TEMP._data.delete(id) };
TEMP.reset = function() { TEMP._data.clear()};
TEMP.store = function(key, val) { TEMP._data.set(key, val) }

目前这就是班级的样子:

class Temp extends Function {
    constructor(){
        super();
        this._data = new Map();
    }
    remove(key) { this._data.delete(key) }
    reset() { this._data.clear() }
    store(key, val) { this._data.set(key, val) }
};

我是Stack Overflow的新手,无法在任何地方找到答案。

1 个答案:

答案 0 :(得分:2)

更好的方法是不要涉及Function.prototype。只是做

function TEMP (key) { return TEMP._data.get(key) }
TEMP._data = new Map(); /*
^^^^^^^^^^^^ */
TEMP.remove = function(id) { TEMP._data.delete(id) };
TEMP.reset = function() { TEMP._data.clear()};
TEMP.store = function(key, val) { TEMP._data.set(key, val) }

由于您的计划中只有一个TEMP只有一个Map,因此没有理由在此处涉及class

如果您需要多个实例,并且坚持为此扩展Function而不是使用简单工厂,请参阅How to extend Function with ES6 classes?