Come sostituire un metodo senza perdere l'originale?
-
21-08-2019 - |
Domanda
sto sostituendo (predominante, il miglioramento, l'aggiunta di funzionalità a) un metodo nel prototipo del Date
dell'oggetto. Ecco una versione semplificata di quello che ho fatto:
Date.prototype._toString = Date.prototype.toString;
Date.prototype.toString = function(mask) {
if(mask == undefined){return this._toString();}
//snip
//...
//snip
return date_string;
}
Come io non voglio perdere il metodo standard, sto assegnando il metodo originale per una variabile temporale e chiamandolo se del caso.
C'è un modo di fare questo senza inquinare l'Date.prototype
namespace?
Quello che sto chiedendo è questa stessa domanda , solo in Javascript.
Soluzione
Si può fare in questo modo: -
(function() {
var _toString = Date.prototype.toString;
Date.prototype.toString = function(mask) {
if (mask == undefined) { return _toString.call(this); }
//snip
}
})();
Altri suggerimenti
Mentre la soluzione di cui sopra è più elegante è il modo che non inquina l'Date.prototype, invita al "nuovo" toString sarà rallentata a causa della chiusura che comporta.
termini di velocità, sarete meglio il modo in cui lei ha citato nella sua interrogazione. Prova un ciclo che chiama il codice di 20.000 volte e quindi provare il codice presentata da Anthony.
A seconda di come spesso il codice viene chiamato, ti consigliamo di andare in un modo o l'altro.
Cheers!
Aggiornamento: è possibile leggere questa piccola da Google