Quando é seguro usar .toString ()?
-
20-08-2019 - |
Pergunta
não valoriza tem que retornar toString () para ser capaz de chamar Value.ToString ()? Quando você sabe que você pode chamar Value.ToString ()?
<script>
var newList = function(val, lst)
{
return {
value: val,
tail: lst,
toString: function()
{
var result = this.value.toString();
if (this.tail != null)
result += "; " + this.tail.toString();
return result;
},
append: function(val)
{
if (this.tail == null)
this.tail = newList(val, null);
else
this.tail.append(val);
}
};
}
var list = newList("abc", null); // a string
list.append(3.14); // a floating-point number
list.append([1, 2, 3]); // an array
document.write(list.toString());
</script>
Outras dicas
Como Mr. Brilhante e novo estados, todas JavaScript objetos têm um método toString
. No entanto, esse método não é sempre útil, especialmente para classes personalizadas e literais de objeto, que tendem a retornar strings como "[Object object]"
.
Você pode criar seus próprios métodos toString
adicionando uma função com esse nome para protótipo sua classe, assim:
function List(val, list) {
this.val = val;
this.list = list;
// ...
}
List.prototype = {
toString: function() {
return "newList(" + this.val + ", " + this.list + ")";
}
};
Agora, se você criar um new List(...)
e chamar seu método toString
(ou executá-lo através de qualquer função ou operador que converte para uma string implicitamente), seu método toString
personalizado será utilizado.
Finalmente, para detectar se um objeto tem um método toString
definido para a sua classe (Note que isto irá não trabalho com subclassificação ou literais de objeto, isto é deixado como um exercício para o leitor), você pode acessar sua propriedade constructor
de prototype
:
if (value.constructor.prototype.hasOwnProperty("toString")) {
alert("Value has a custom toString!");
}
document.write, como window.alert, chama o método toString de seu argumento antes que ele escreve ou retorna nada.
Outras respostas estão corretas que toString
existe em todos os objetos JavaScript.
Em geral, porém, se você quiser saber se uma função existe no seu objeto, você pode testá-lo assim:
if (obj.myMethod) {
obj.myMethod();
}
Isto não significa, é claro, garantir que myMethod
é uma função em vez de uma propriedade. Mas provavelmente você vai saber isso.