質問

は値がvalue.toStringを(呼び出すことができるように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>

他のヒント

氏として光沢があり、新しいの状態は、のすべてののJavaScriptオブジェクトはtoString方法を持っています。しかし、その方法は、特に"[Object object]"のような文字列を返す傾向にあるカスタムクラスとオブジェクトリテラル、のために、常に有用ではありません。

あなたはそうのように、あなたのクラスのプロトタイプにその名前の関数を追加することで、独自のnew List(...)メソッドを作成することができます

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

    // ...
}

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

さて、あなたはconstructorを作成し、カスタムprototype方法が使用され、その<=>メソッドを呼び出します(または暗黙的に文字列に変換する関数や演算子を介して実行)。場合は、

最後に、(;それは読者のための課題として残され、これはサブクラスまたはオブジェクトリテラルとの のない動作することに留意されたい)オブジェクトは、そのクラスに定義<=>方法を持っているかどうかを検出します、あなたはその<=>の<=>プロパティにアクセスすることができます:

if (value.constructor.prototype.hasOwnProperty("toString")) {
    alert("Value has a custom toString!");
}
それは書き込んだり、何かを返す前に、

のdocument.writeは、のwindow.alertのように、その引数のtoStringメソッドを呼び出します。

他の回答はtoStringは、すべてのJavascriptのオブジェクトの上に存在していることが正しいです。

あなたが関数は、オブジェクト上に存在するかどうかを知りたい場合は一般的に、しかし、あなたはそのようにそれをテストすることができます:

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

これは、当然のことながら、代わりにプロパティの機能がmyMethodであることを保証しません。しかし、おそらくあなたはそれを知っているよ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top