function Hoge (a) { this.x = a; } var a = new (function () { return Hoge.apply(this, ["hoge"]); })(); a instanceof Hoge; // => false 最初のパターンがうまくいっていた(Arrayのインスタンスが返ってきていた)ように見えたのは、組み込みの Array 関数が「配列オブジェクト」を返すためです。実はnew 演算子の結果は、コンストラクタ関数がオブジェクトを返す場合はそのオブジェクトになり、それ以外の場合にコンテキストオブジェクト(i.e. this)になります。 つまり、最初の例は実は以下のコードとほぼ等価だったということになります: