Concatenar mi objeto con una cuerda

Esta pregunta es para objetos en Javascript.

Me doy cuenta de que puedo agregar una cadena y un objeto de error muy bien, y el texto del objeto de error se concatena sin problemas.

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

Esta salida There was an error. Error: Sample Text lo cual es genial. El objeto Error sabía qué cadena quería concatenar. Mis propios objetos no se comportan bien así.

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

Mis propias salidas de objetos What does my object say: [object Object] y no actúa bien como lo hace el objeto Error.

No quiero [object Object] para ser salida. ¿Cómo puedo cambiar qué cadena escupe myObject cuando se agrega a una cadena?

preguntado el 10 de marzo de 12 a las 07:03

2 Respuestas

Debes darle a tus objetos un toString método que devuelve la cadena adecuada. Entonces solo necesitas cambiar el nombre get_text a toString. Podrías escribirlo algo como esto:

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

respondido 10 mar '12, 07:03

Gracias. Solo tuve que cambiar el nombre de get_text a toString y todo funcionó. - garth smith

Debe proporcionar un método toString(), como en el lenguaje de programación Java.

(La gente siempre le da mucha importancia a las diferencias entre los idiomas, pero en realidad comparten algunas similitudes notables, como esta).

Por ejemplo, mira este fragmento de código:

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

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

Para los objetos existentes, puede agregar un método toString de esta manera:

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

respondido 10 mar '12, 07:03

Gracias. Votaría su respuesta pero no tengo suficiente reputación. >.< - garth smith

JavaScript es sólo superficialmente similar a Java. En realidad, es lo que harías si tomaras Scheme y Self y los obligaras a hacer algo que se pareciera a Java y se comportara como Java. Pero en realidad es muy diferente: mucho más funcional, tipificado dinámicamente, basado en prototipos... - Tikhon Jelvis

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.