Cómo reemplazar un método sin perder el original?
-
21-08-2019 - |
Pregunta
Estoy reemplazando (primordial, mejorar, añadir funcionalidad a) un método en el prototipo de la Date
objeto. Aquí es una versión simplificada de lo que he hecho:
Date.prototype._toString = Date.prototype.toString;
Date.prototype.toString = function(mask) {
if(mask == undefined){return this._toString();}
//snip
//...
//snip
return date_string;
}
Como no quiero perder el método estándar, estoy asignando el método original a una variable temporal y llamándolo en su caso.
¿Hay una manera de hacer esto sin contaminar el espacio de nombres Date.prototype
?
Lo que estoy pidiendo es esta misma pregunta , sólo en Javascript.
Solución
Puede hacerlo de esta manera: -
(function() {
var _toString = Date.prototype.toString;
Date.prototype.toString = function(mask) {
if (mask == undefined) { return _toString.call(this); }
//snip
}
})();
Otros consejos
Mientras que la solución anterior es más elegante es la manera en que no contamina el Date.prototype, las llamadas a la "nueva" toString será más lento debido al cierre que implica.
términos de velocidad, que va a estar mejor la forma en que usted ha mencionado en su pregunta. Pruebe un bucle que llama a su código de 20.000 veces y luego tratar el código presentado por Anthony.
En función de la frecuencia con su código se llama, tendrá que ir en una dirección u otra.
Saludos!
Actualización: se puede leer este pequeño de Google