Как заменить метод без потери оригинала?
-
21-08-2019 - |
Вопрос
Я заменяю (переопределяю, улучшаю, добавляю функциональность) метод в прототипе 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
пространство имен?
То, о чем я спрашиваю, это этот же вопрос, только в Javascript.
Решение
Вы можете сделать это вот так:-
(function() {
var _toString = Date.prototype.toString;
Date.prototype.toString = function(mask) {
if (mask == undefined) { return _toString.call(this); }
//snip
}
})();
Другие советы
Хотя вышеупомянутое решение более элегантно в том смысле, что оно не загрязняет Date.prototype, вызовы "новой" toString будут замедлены из-за связанного с ним закрытия.
С точки зрения скорости, вам будет лучше так, как вы упомянули в своем вопросе.Попробуйте цикл, который вызывает ваш код 20 000 раз, а затем попробуйте код, представленный Энтони.
В зависимости от того, как часто вызывается ваш код, вы захотите пойти тем или иным путем.
Ваше здоровье!
Обновить:вы можете прочитать это небольшое пример из Google