Вопрос

Я заменяю (переопределяю, улучшаю, добавляю функциональность) метод в прототипе 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top