2012-03-10 3 views
2

Cette question concerne les objets en Javascript.Concaténer mon objet avec une chaîne

Je remarque que je peux très bien ajouter une chaîne et un objet Error, et le texte de l'objet Error est concaténé sans problème.

try { 
    throw new Error('Sample Text'); 
} catch (error) { 
    document.writeln('There was an error. ' + error); // Go plus sign! 
} 

Ce sorties There was an error. Error: Sample Text qui est assez cool. L'objet Error connaissait la chaîne que je voulais concaténer. Mes propres objets n'agissent pas comme ça.

var myObject = (function() { 
    var text = 'Text I want to concat.', 
     get_text = function() { return text; }, 
     that = {}; 
    that.get_text = get_text; 
    return that; 
}()); 
document.writeln('What does my object say: ' + myObject); // Uncool 

Mes propres sorties d'objet What does my object say: [object Object] et n'agit pas agréable comme l'objet d'erreur ne.

Je ne veux pas que [object Object] soit affiché. Comment puis-je changer la chaîne que myObject crache lorsqu'il est ajouté à une chaîne?

Répondre

3

Vous devez donner à vos objets une méthode toString qui renvoie la chaîne appropriée. Il vous suffit donc de renommer get_text en toString. Vous pouvez écrire quelque chose comme ceci:

var myObject = (function() { 
    var text = 'Text I want to concat.'; 
    return { 
     toString : function() { return text } 
    }; 
}()); 
+0

Merci. J'ai juste dû changer le nom de get_text en toString et tout a fonctionné. –

1

Vous devez fournir une méthode toString(), comme dans le langage de programmation Java.

(. Les gens font toujours un gros problème sur la façon dont les langues sont différentes, mais vraiment, ils partagent quelques similitudes notables, comme celui-ci)

Par exemple, regardez ce morceau de code:

function Apple() { 
    this.toString = function() { 
     return "I'm an Apple!" 
    } 
} 

var apple = new Apple(); 
document.write(apple); 

Pour les objets existants, vous pouvez ajouter une méthode toString cette façon:

existingObject.prototype.toString = function() { 
    return "I am an existing objet."; 
} 
+0

Merci. Je voterais votre réponse mais je n'ai pas assez de réputation. >. < –

+0

JavaScript est seulement * superficiellement * similaire à Java. En réalité, c'est ce que vous feriez si vous preniez Scheme et Self et les forçais à faire quelque chose qui ressemblait à Java et qui se comportait comme Java. Mais c'est vraiment très différent - beaucoup plus fonctionnel, typé dynamiquement, basé sur un prototype ... –

Questions connexes