代码之家  ›  专栏  ›  技术社区  ›  Esteban Küber

如何在不丢失原始数据的情况下替换方法?

  •  2
  • Esteban Küber  · 技术社区  · 15 年前

    我正在替换(重写、改进、添加功能)原型中的方法 Date 对象。以下是我所做工作的简化版本:

    Date.prototype._toString = Date.prototype.toString;
    
    Date.prototype.toString = function(mask) {
        if(mask == undefined){return this._toString();}
        //snip
        //...
        //snip
        return date_string;
    }
    

    因为我不想丢失标准方法,所以我将原始方法分配给一个时间变量,并在适当的时候调用它。

    有没有办法做到这一点而不污染 Date.prototype 命名空间?

    我要问的是 this same question ,仅在javascript中。

    2 回复  |  直到 15 年前
        1
  •  7
  •   AnthonyWJones    15 年前

    你可以这样做:

    (function() {
        var _toString = Date.prototype.toString;
        Date.prototype.toString = function(mask) {
           if (mask == undefined) { return _toString.call(this); }
        //snip
        }
     })();
    
        2
  •  1
  •   Oli    15 年前

    虽然上面的解决方案更优雅,但它不会污染日期。原型,但对“新”ToString的调用将因涉及的关闭而减慢。

    就速度而言,你会比你在问题中提到的更好。尝试一个调用代码20000次的循环,然后尝试安东尼提交的代码。

    根据您的代码被调用的频率,您将希望执行一种或另一种方式。

    干杯!

    更新:你可以读这个小东西 sample from Google

    推荐文章