2

我正在替换(覆盖、改进、添加功能)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

我要问的是同样的问题,仅在 Javascript 中。

4

2 回答 2

7

你可以这样做: -

(function() {
    var _toString = Date.prototype.toString;
    Date.prototype.toString = function(mask) {
       if (mask == undefined) { return _toString.call(this); }
    //snip
    }
 })();
于 2009-06-29T15:51:55.167 回答
1

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

就速度而言,您在问题中提到的方式会更好。尝试一个循环调用您的代码 20,000 次,然后尝试 Anthony 提交的代码。

根据您的代码被调用的频率,您会想要采用一种方式或另一种方式。

干杯!

更新:你可以从谷歌阅读这个小样本

于 2009-06-29T19:04:55.660 回答