foo = new Object(); foo.property = 12345;
bar = new Function("x, y", "return x * y;");
baz = new Array(123, "abc", null);
qux = new String("String object");
quux = new Boolean(true);
corge = new Number(12345);
grault = new Date();
garply = new RegExp("\\d+");
waldo = new Error("No way.");

プリミティブ値はリテラル記法で表現したが、
オブジェクトは主に new 演算子を使って生成する。

Function オブジェクトに関しては、
function キーワードを使って作成するのが普通だが、
他と同様、new 演算子で作成することも可能だ。

JavaScript でのオブジェクト生成構文は、
Java や C++ に近くなるように設計されている。

ただ、JavaScript ではその文の意味合いが大きく異なる。

Java 等のオブジェクト指向言語では、クラスを定義することで、
インスタンスの持つ構造を事前に決めることができる。
クラスは実行文ではなく、コード解析時に解釈される「設計図」であり、
実体を持つインスタンスとは異なるメタ情報として保持される。

そして、new 演算子の後ろに続く識別子は、
事前に静的に設計したクラスを参照するための名前であり、
new 演算子によって、クラスのコンストラクタが呼び出される。
つまり、new 演算子のオペランドは、「クラス名」となる。

しかし、JavaScript には静的にデータ構造を定義する機能がない。
ほとんど全ての文が、実行時に評価される実行文である。
そのため、実体のないクラスの「設計図」などは存在しない。

となると、new 演算子の後ろに続くのは何だろうか。
メタ情報を持たない JavaScript では、
何かしらの値であることは間違いない。

構文から想像できるかもしれないが、
実は、これは関数オブジェクトなのである。