Pergunta

Eu estou substituindo (sobrescrevendo, melhorando, adicionando funcionalidade a) um método no protótipo do objeto Date. Aqui está uma versão simplificada do que eu fiz:

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

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

Como eu não quero perder o método padrão, estou atribuindo o método original para uma variável temporal e chamando-o, se necessário.

Existe uma maneira de fazer isso sem poluir o namespace Date.prototype?

O que estou pedindo é esta mesma pergunta , apenas no Javascript.

Foi útil?

Solução

Você pode fazê-lo assim: -

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

Outras dicas

Enquanto a solução acima é mais elegante é a maneira que ele não poluir o Date.prototype, chamadas para o toString "novo" vai ser abrandado por causa do fechamento ela envolve.

termos de velocidade, você vai ser melhor do jeito que você mencionou na sua pergunta. Tente um loop que chama o código de 20.000 vezes e depois tentar o código apresentado por Anthony.

Dependendo da forma como o código é chamado, você vai querer ir por um caminho ou outro.

Felicidades!

Update: você pode ler este pequeno do Google

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top