簡體   English   中英

如何在不丟失原件的情況下更換方法?

[英]How to replace a method without losing the original?

我正在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命名空間的情況下執行此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的調用將會變慢。

它的速度方面,你會比你在問題中提到的方式更好。 嘗試一個調用代碼20,000次的循環,然后嘗試Anthony提交的代碼。

根據您的代碼調用頻率,您可能希望采用這種方式。

干杯!

更新:您可以從Google閱讀這個小樣本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM