2

value 不是必须返回 toString() 才能调用 value.toString() 吗?你什么时候知道可以调用 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>
4

4 回答 4

5

JavaScript 中的每个对象都有一个 toString() 方法。

于 2009-06-26T20:05:17.240 回答
5

正如Shiny 和 New 先生所说,所有JavaScript 对象都有一个toString方法。但是,该方法并不总是有用的,尤其是对于自定义类和对象字面量,它们往往会返回类似"[Object object]".

toString您可以通过将具有该名称的函数添加到类的原型来创建自己的方法,如下所示:

function List(val, list) {
    this.val = val;
    this.list = list;

    // ...
}

List.prototype = {
    toString: function() {
        return "newList(" + this.val + ", " + this.list + ")";
    }
};

现在,如果您创建 anew List(...)并调用其toString方法(或通过任何将其隐式转换为字符串的函数或运算符运行它),toString将使用您的自定义方法。

最后,要检测一个对象是否有toString为其类定义的方法(请注意,这不适用于子类化或对象字面量;这留给读者练习),您可以访问它constructorprototype属性:

if (value.constructor.prototype.hasOwnProperty("toString")) {
    alert("Value has a custom toString!");
}
于 2009-06-27T00:29:28.643 回答
0

其他答案是正确的,toString存在于所有 Javascript 对象上。

但是,通常,如果您想知道对象上是否存在函数,可以像这样测试它:

if (obj.myMethod) {
    obj.myMethod();
}

当然,这并不能确保它myMethod是一个函数而不是一个属性。但想必你会知道的。

于 2009-06-29T20:09:36.043 回答
0

document.write 与 window.alert 一样,在写入或返回任何内容之前调用其参数的 toString 方法。

于 2009-06-26T23:46:56.967 回答