POJO (Plain Old JavaScript Object) は、JavaScriptにおけるシンプルなオブジェクトのことを指します。Javaや他の言語で使われるPOJOという用語から派生しており、特にフレームワークや特別な機能を持たない「純粋な」オブジェクトを指します。以下はその特徴です:
1. シンプルなオブジェクトリテラルで記述される
POJOは、JavaScriptのオブジェクトリテラル構文 {}
を用いて作られます。特定のプロトタイプやクラスに依存せず、標準的なJavaScriptのオブジェクトとして扱われます。
const person = { name: "Alice", age: 30 };
2. 特別な機能やメソッドを持たない
POJOは、追加の機能やメソッドを持たない単純なデータ構造です。通常はキーと値のペア(プロパティ)だけで構成されます。
3. プロトタイプチェーンに依存しない
POJOは、特定のカスタムプロトタイプ(例えば、クラスベースのオブジェクト)に依存しません。JavaScriptの標準的な Object.prototype
を継承しています。
const obj = {}; // これはPOJO console.log(Object.getPrototypeOf(obj) === Object.prototype); // true
4. シリアライズしやすい
POJOはJSON形式で簡単にシリアライズ(文字列化)できます。これにより、データを保存したり、APIを通じて送受信するのに適しています。
const data = {
id: 1,
title: "Example"
};
const json = JSON.stringify(data);
console.log(json); // '{"id":1,"title":"Example"}'
5. クラスや特殊な構文を使用しない
クラスや関数コンストラクター、getter/setter、Symbol
などの特殊な構文を使用しません。純粋にデータを保持する目的で使われます。
6. 動的に拡張可能
POJOは動的にプロパティを追加したり変更したりできます。
const user = { name: "John" };
user.age = 25; // プロパティを追加
user.name = "Jane"; // プロパティを変更
console.log(user);
// { name: "Jane", age: 25 }
注意点
-
POJOではないオブジェクトの例
- クラスやコンストラクター関数を使って生成されたオブジェクト。
- 特定のフレームワークで拡張されたオブジェクト(例えば、
Vue
のリアクティブオブジェクト)。 - 特殊なビルトインオブジェクト(
Date
やMap
など)。
POJOの利点は、そのシンプルさと柔軟性です。特定のライブラリやフレームワークに依存しないため、直感的に使いやすく、データの保存や操作が簡単です。