Homa Page di Daniele Franceschini
Qualche informazione sul metodo toString()
Un altro interessante metodo predefinito dell'oggetto Object è toString(). Lo scopo di questo metodo e quello di restituire infomazioni interne all'oggetto, generalmente il tipo di dato e: "[Object classe]". La classe può essere uno dei tipi predefiniti tipo "Object", "Array", "Function". Quando realiziamo una funzione che rappresenta una classe è utile ridefinire questo metodo, che viene ereditato da Object, al fine di restituire informazioni relative alla nostra classe. Attraverso questo metodo le istanze della nostra classe possono essere convertite in stringhe, infatti quando si concatena un oggetto ad una stringa, il motodo toString() viene richiamato implicitamente. Eccovi un esempio: Come dicevo prima, tutto funziona perché viene richiamato il metodo toString() definito nell'oggetto base "Object". Tutti gli oggetti ereditano da "Object", pertanto dove non arriva il figlio potrebbe arrivare il padre. Sembra molto attuale questa similitudine! Proviamo a ridefinere il metodo toString() Infine ammettiamo che per qualche ragione, ad esempio per motivi di debug, volessimo richiamre il metodo toString() dell'oggetto base, come possiamo fare visto che lo abbiamo ridefinito? Così://creo un oggetto vuoto
function myObject(){
}
//Ne faccio una istanza
var obj = new myObject();
//concateno l'istanza con una stringa
alert("cosa è obj ?" + obj);//creo un oggetto vuoto
function myObject(){
}
//Ne faccio una istanza
var obj = new myObject();
//concateno l'istanza con una stringa
alert("cosa è obj ?" + obj);
//Definisco un mio metodo toString() sulla "classe"
myObject.prototype.toString = function() {
return "[Object myObject]";
}
//Adesso il risultato della concatenazione mostra un messaggio più
//pertinente e meno generico. Come si può vedere il metodo toString()
//viene sempre chiamato implicitamente.
alert("cosa è obj ?" + obj);
//tuttavia niente vieta di scrivere:
alert("cosa è obj ?" + obj.toString());//creo un oggetto vuoto
function myObject(){
}
//Ne faccio una istanza
var obj = new myObject();
//concateno l'istanza con una stringa
alert("cosa è obj ?" + obj);
//Definisco un mio metodo toString() sulla "classe"
myObject.prototype.toString = function() {
return "[Object myObject]";
}
//Adesso il risultato della concatenazione mostra un messaggio più
//pertinente e meno generico. Come si può vedere il metodo toString()
//viene sempre chiamato implicitamente.
alert("cosa è obj ?" + obj);
//tuttavia niente vieta di scrivere:
alert("cosa è obj ?" + obj.toString());
//richiamo il metodo dell'oggetto base
alert(Object.prototype.toString.apply(obj));




