コンストラクタの戻り値

コンストラクタがオブジェクト以外を返す場合,this を返すようだ.

function Foo () {
  return new Bar();
}

function Bar() {
}

function Baz() {
  return false;
}

var foo = new Foo();
alert("foo = " + foo.constructor);
var baz = new Baz();
alert("baz = " + baz.constructor);

自分のイメージだと,new はこんなことをしている.

var obj = new Cons(args);
//       ↓ 変換
var obj = {}                          // 空のオブジェクトを作成
(function () {                        // 変数ret のスコープ
  var ret = Cons.apply(obj, args);    // コンストラクタを実行
  if (typeof ret == "object") {       // 戻り値がオブジェクトであれば
    obj = ret;                        // それを返す
  } else {
    obj.constructor = Cons;           // オブジェクトのコンストラクタの設定
  }
})();

とあいえ,本には,obj.prototype.constructor に設定される.とあるな.
jsUnit とかで調べるような環境を作るか?

kozawa さんとこ見たら,nanto_vi さんとこへのリンクががが.

http://nanto.asablo.jp/blog/2005/10/24/118564

こらいい.やっぱ.nanto_vi さんに聞くが吉.