質問: jsの勉強をしているのですがオブジェクトとインスタンスの用語で疑問に思ったので質問させていただきます。 ・オブジェクトは{}で表し、{属性: 値}のように情報を入れる箱のようなものと認識しているのですが、 インスタンスも同じようなものという理解でよろしいでしょうか? ・また、newで生成したオブジェクトをインスタンスというのですか?インスタンスとは呼ばずにオブジェクトといっても間違いではないですか?
回答: JavaScriptで「オブジェクト」という場合、**2通り**の意味があります。 * 配列・関数・オブジェクトリテラル・ラッパーオブジェクトなど、プリミティブでないすべての値(JavaScriptでは、インスタンスとほぼ同じ意味) * その中でも、`{}`や`new Object`(まず実用しませんが)で作られる種類のオブジェクト 配列や関数、`new`で作るものはすべてインスタンスであり、広義のオブジェクトですが、`{}`などの狭義のオブジェクトとは別種なものです。 「インスタンス」という単語には、「何かを元にして作ったもの」という意味を含みますが、JavaScriptでは意図的に`new`しなくても、ほとんどの場合(広義の)オブジェクトには`prototype`、つまり元にするオブジェクトが設定されます。`function(){}`は`Function`のインスタンス、`[]`は`Array`のインスタンス、そして`{}`は`Object`のインスタンスです。 そこまで使う頻度が高いわけではありませんが、`Object.create(null)`などでプロトタイプを持たないオブジェクトも生成することは可能です。