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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top