2009-06-29 7 views
2

Ich ersetze (überschreiben, verbessern, Funktionalität hinzufügen) eine Methode im Prototyp des Date Objekts. Hier ist eine vereinfachte Version von dem, was ich getan habe:Wie man eine Methode ersetzt, ohne das Original zu verlieren?

Date.prototype._toString = Date.prototype.toString; 

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

Da ich nicht die Standard-Methode zu verlieren, ich bin die ursprüngliche Methode zu einer zeitlichen Variablen zugewiesen und es gegebenenfalls anrufen.

Gibt es eine Möglichkeit, dies zu tun, ohne den Namespace Date.prototype zu verschmutzen?

Was ich frage ist this same question, nur in Javascript.

Antwort

7

Sie können es tun, wie folgt: -

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

Während die obige Lösung eleganter ist, ist die Art und Weise, dass es nicht die Date.prototype nicht verschmutzen, ruft die „neue“ toString verlangsamt werden wegen der Schließung, die es beinhaltet.

In Bezug auf die Geschwindigkeit, werden Sie besser aus dem Weg sein, den Sie in Ihrer Frage erwähnt haben. Versuchen Sie eine Schleife, die Ihren Code 20.000 Mal aufruft und dann den von Anthony eingereichten Code versucht.

Je nachdem, wie oft Ihr Code aufgerufen wird, sollten Sie den einen oder anderen Weg gehen.

Prost!

Update: Sie können diese kleine sample from Google

lesen
Verwandte Themen