Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在不丢失原有方法的情况下替换方法?_Javascript_Prototype_Overriding - Fatal编程技术网

Javascript 如何在不丢失原有方法的情况下替换方法?

Javascript 如何在不丢失原有方法的情况下替换方法?,javascript,prototype,overriding,Javascript,Prototype,Overriding,我正在替换Date对象原型中的一个方法(覆盖、改进、添加功能)。以下是我所做工作的简化版本: Date.prototype._toString = Date.prototype.toString; Date.prototype.toString = function(mask) { if(mask == undefined){return this._toString();} //snip //... //snip return date_string;

我正在替换
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中。

您可以这样做:-

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

虽然上述解决方案更为优雅,因为它不会污染Date.prototype,但对“new”toString的调用将因其涉及的关闭而减慢

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

根据代码被调用的频率,您可能会选择一种或另一种方式

干杯

更新:你可以读这个小故事