如何在不丢失原件的情况下更换方法?

时间:2009-06-29 15:45:58

标签: javascript prototype override

我正在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 个答案:

答案 0 :(得分:7)

你可以这样做: -

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

答案 1 :(得分:1)

虽然上面的解决方案更优雅的是它不会污染Date.prototype,但由于它涉及的闭包,对“new”toString的调用将会变慢。

速度方面,你会比你在问题中提到的方式更好。尝试一个调用代码20,000次的循环,然后尝试安东尼提交的代码。

根据您的代码调用的频率,您可能希望采用这种方式。

干杯!

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