Newsgroup: it.comp.lang.javascript
Titolo: NS e overloading

Giocando a fare l'overloading dei metodi dell'oggetto Date ho trovato un
grosso bug (almeno cosě mi sembra) di NS e Mozilla.
Ho ridefinito la funzione toString nella seguente maniera:
    function stampadata() {
        return this.getDate() + "-" + this.getMonth() + "-" +
this.getFullYear();
    }
    Date.prototype.toString = stampaData;
Quando provo a stampare la data nella seguente maniera:
    d = new Date();
    document.write(d);
correttamente viene stampato quello ci si aspettava, e cioč:
    30-10-2002
Invece, concatenando la data ad un'altra stringa, ad esempio:
    document.write(d + "<br>");
NS e derivati stampano la data nella maniera usuale. IE invece funziona
correttamente.
Č un bug veramente o sono io che non ho capito qualcosa?
Maurizio.


Da quello che hai postato e' normale.
Un passo lo hai saltato per forza visto che hai definito un metodo che non
hai usato nel codice che hai scritto (e, non te lo vengo certo ad insegnare,
un oggetto e una sua proprieta' sono cose diverse checche' ne dicano ie o
ms).
P.S. forse scazzo io, ma non si chiamava over(-)ride? Ovvero non e' un
sovraccarico, ma una "sovrascrittura".

 e' un sovraccarico, ma una "sovrascrittura".
Questo non mi è stato mai chiaro e probabilmente hai ragione. In effetti
l'overloading è la possibilità di avere funzioni con lo stesso nome ma con
argomenti diversi. Però io ho imparato la programmazione ad oggetti con il
C++ e qui si parla di "overloading degli operatori", cioè la possibilità di
ridefinire un operatore da parte del programmatore, che sembrerebbe un
override. Per cui ho sempre avuto la sensazione che questi termini non
fossero così precisi.
Maurizio.

 Prova a "ribadire" il metodo toString dopo d.
Certo, cosě sicuramente funziona. Quello che non riesco a capire perché, se
non si richiama toString, funziona sono in parte con NS e Mozilla.
Maurizio.

[...]
Ora ho compreso e non avevo mai notato che le conversioni implicite venivano
fatte richiamando il metodo toString.
Credo che sia anche questo il punto: e' cosi' per definizione o per
comportamento?
Sottomano ho solo ie6 e mozilla 0.9.2 e tutti e due chiamano il toString
sovraccaricato (ora e pomeriggio e credo abbia ragione tu).

 comportamento?
Io credo per definizione. In realtà non l'ho mai letto da nessuna parte ma
sono sempre stato convinto di ciò perché così è anche in Java.
Maurizio.

 fossero così precisi.
l'overloading consiste nell'affiancare ad una funzione membro (visto che sei
familiare col C++) gia' esistente un'altra con parametri differenti, ad
esempio definendo un costruttore di copia.
l'override consiste invece nel ridefinire metodi gia' esistenti nella classe
base, virtuali o meno, dandogli un comportamento differente
~~
artemis.alpeia

 base, virtuali o meno, dandogli un comportamento differente
Oddio. Confusione.
Sono sempre a memoria e sempre di notte. Avevo ripiegato verso l'overloading
di Maurizio perche' conosco solo un poco di C# (nulla di C e C++, se non per
derivazione) e direi che venga cosi' chiamato sia il sovrascrivere, anche di
operatori, sia la creazione ex-novo.
Fra qualche ora, reference alla mano, mi tolgo le paturnie notturne.

 Č un bug veramente o sono io che non ho capito qualcosa?
Penso che piu' che bug, agiscano davvero in modo differente i due interpreti
(a livello di logica proprio) sugli oggetti nativi, perche' altrimenti da
NS4 fino a Mozilla 1 avrebbero cambiato questo comportamento. Probabilmente
ci sono cose a monte che ignoriamo, ma anche io mi sono stupito della cosa..
Vogliamo sentire direttamente gli sviluppatori Netscape che dicono?
--------------------------------
Inviato via 
http://usenet.libero.it

 derivazione)
Senza andare a scomodare altri linguaggi, (tantomeno il C,C++ e C#), oltre
che un po' di logica (come tu stesso hai usato Andrea :) ), basta leggere un
poco di reference di JS:
"*Overriding* the default toString method. You can create a function to be
called in place of the default toString method."


 Javascrrrrriiiipppptttt!!! ;_; )
Irresistibile quando fa i capricci, nevvero?

 Vogliamo sentire direttamente gli sviluppatori Netscape che dicono?
Perché no? Mi sembra un'ottima idea. Purché te ne occupi tu :-)
Maurizio.