Object.prototype.toSource()

廃止

この機能は廃止されました。まだいくつかのブラウザーで動作するかもしれませんが、いつ削除されてもおかしくないので、使わないようにしましょう。

toSource() メソッドは、オブジェクトのソースコードを表す文字列を返します。

構文

Object.toSource();
obj.toSource();

返値

オブジェクトのソースコードを表す文字列です。

解説

toSource() メソッドは以下の値を返します。

  • 組み込みの Object オブジェクトに対しては、 toSource() はソースコードが利用できないことを示す次の文字列を返します。
    function Object() {
        [native code]
    }
    
  • Object のインスタンスに対しては、toSource() はソースコードを表す文字列を返します。

デバッグ時に toSource() を呼び出して、オブジェクトの内容を調べることができます。

toSource() メソッドのオーバーライド

オブジェクトが toSource() メソッドをオーバーライドしても安全です。例えば次のコードを見てください。

function Person(name) {
  this.name = name;
}

Person.prototype.toSource = function Person_toSource() {
  return 'new Person(' + uneval(this.name) + ')';
};

console.log(new Person('Joe').toSource()); // ---> new Person("Joe")

組み込み toSource() メソッド

コア JavaScript のそれぞれの型は独自の toSource() メソッドを持っています。これらのオブジェクトの例を示します。

循環オブジェクトの正弦

再帰的にリンクされたリストや双方向に移動可能なツリーなど、自分自身への参照を含むオブジェクトの場合、 toSource() は Firefox 24 のように自己参照を再生成しません。例えば、次のようになります。

var obj1 = {};
var obj2 = { a: obj1 };
obj1.b = obj2;

console.log('Cyclical: ' + (obj1.b.a == obj1));

var objSource = obj1.toSource(); // returns "({b:{a:{}}})"

obj1 = eval(objSource);

console.log('Cyclical: ' + (obj1.b.a == obj1));

循環構造が採用されていて toSource() が必要な場合、オブジェクトはコンストラクターへの参照を使用するか、無名関数を提供するかのいずれかの方法で、 toSource() へのオーバーライドを提供しなければなりません。

toSource() の使用

次のコードは Dog オブジェクト型を定義して theDog、すなわち Dog 型のオブジェクトを生成します。

function Dog(name, breed, color, sex) {
  this.name = name;
  this.breed = breed;
  this.color = color;
  this.sex = sex;
}

theDog = new Dog('Gabby', 'Lab', 'chocolate', 'female');

toSource() メソッドを theDog に対して呼び出すと、そのオブジェクトを定義する JavaScript のソースが表示されます。

theDog.toSource();
// returns ({name:"Gabby", breed:"Lab", color:"chocolate", sex:"female"})

仕様書

標準の一部ではありません。 JavaScript 1.3 で実装されました。

ブラウザーの互換性

BCD tables only load in the browser

関連情報