2009-06-29 60 views
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命名空間?

我在問什麼是this same question,只能用Javascript。

回答

7

你可以像下面這樣做: -

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

雖然上述方案是更優雅的是,它不污染Date.prototype的方式,則對「新」的toString將放緩因爲它涉及的關閉。

它的速度條款,你會更好的方式,你提到你的問題。嘗試一個循環,調用您的代碼20,000次,然後嘗試安東尼提交的代碼。

根據你的代碼被調用的頻率,你會想要去一個或另一個。

乾杯!

更新:您可以閱讀這個小圖片sample from Google

相關問題