【问题标题】:Extending JavaScript Function扩展 JavaScript 函数
【发布时间】:2018-09-24 01:36:17
【问题描述】:

有没有办法将下面的代码作为类扩展函数?如果没有,有更好的方法吗?我确实想使用除标准原生 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 的新手,在任何地方都找不到答案。

【问题讨论】:

    标签: javascript function class prototype extend


    【解决方案1】:

    更好的方法是不涉及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?

    【讨论】:

    • 谢谢。我希望使这个函数具有通用性,并且可以作为库在其他项目中使用,但我认为这是可行的。
    • 要从中创建一个库,只需将其包装在 function makeTemp() {...return TEMP; } 中。
    • 谢谢。但该死的,这种所谓的私人地图捷径很糟糕......我不能做类似“for (TEMP(0) in obj) { newObj[TEMP(0)] = obj[TEMP(0)]} ”现在我需要考虑其他事情。好吧,它有它的用途......
    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多