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メソッドがあります。ただし、このメソッドは、特に、のような文字列を返す傾向があるカスタムクラスやオブジェクトリテラルの場合、常に役立つとは限りません"[Object object]"

toString次のように、その名前の関数をクラスのプロトタイプに追加することで、独自のメソッドを作成できます。

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

    // ...
}

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

これで、を作成してnew List(...)そのメソッドを呼び出すtoString(または、暗黙的に文字列に変換する関数または演算子を介して実行する)と、カスタムtoStringメソッドが使用されます。

最後に、オブジェクトにそのクラスに定義されたメソッドがあるかどうかを検出するために(これはサブクラス化またはオブジェクトリテラルでは機能しないtoStringことに注意してください。これは読者の演習として残されています)、そのプロパティにアクセスできます。constructorprototype

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

JavaScriptのすべてのオブジェクトにはtoString()メソッドがあります。

于 2009-06-26T20:05:17.240 に答える
0

document.writeは、window.alertと同様に、何かを書き込んだり返したりする前に、引数のtoStringメソッドを呼び出します。

于 2009-06-26T23:46:56.967 に答える
0

toStringすべてのJavascriptオブジェクトに存在する他の答えは正しいです。

ただし、一般的に、オブジェクトに関数が存在するかどうかを知りたい場合は、次のようにテストできます。

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

もちろん、これはそれmyMethodがプロパティではなく関数であることを保証するものではありません。しかし、おそらくあなたはそれを知っているでしょう。

于 2009-06-29T20:09:36.043 に答える