0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[JavaScript] newが使える組み込みオブジェクト / 使えない組み込みオブジェクト

Posted at

概要

JavaScript には、最初から利用できる 組み込みオブジェクト(Built-in Objects) が多数用意されています。
これらの中には new キーワードを使って インスタンスを生成できるもの と、
new を使えず そのまま利用するもの が存在します。

つまり、

new が使えるかどうかの違いは、その組み込みオブジェクトが
インスタンス(状態を持つ実体)を生成する設計か、
機能をまとめた名前空間(ユーティリティ)として設計されているかの違い」

です。

この記事では、

  • new が使える組み込みオブジェクト
  • new が使えない組み込みオブジェクト
  • その設計思想の違い

を整理して解説します。

目次

new キーワードの役割

new は、コンストラクタ関数やクラスから新しいオブジェクト(インスタンス)を生成するためのキーワードです。

const date = new Date();

内部的には次の処理が行われています。

  1. 空のオブジェクトを作成
  2. this をそのオブジェクトに束縛
  3. コンストラクタを実行
  4. オブジェクトを返す

👉 new は「状態を持つ実体を作る」ための仕組みです。

new が使える組み込みオブジェクト

new が使える組み込みオブジェクトには、次の共通点があります。

  • インスタンスを生成する
  • インスタンスごとに状態を持つ
  • prototype にメソッドが定義されている

代表例

new Date();
new Map();
new Set();
new Error("error");
new Promise(() => {});

例:Date

const d1 = new Date();
const d2 = new Date("2025-01-01");
  • それぞれ異なる日時という 状態 を持つ
  • インスタンスを作る意味がある

new が使えない組み込みオブジェクト

new が使えない組み込みオブジェクトは、
インスタンスを生成しない設計になっています。

共通点

  • 状態を持たない
  • すべて static なメソッドや定数
  • 名前空間(ユーティリティ)として機能する

代表例

Math
JSON
Reflect
Atomics

例:Math

Math.random();
Math.max(1, 2, 3);
new Math(); // TypeError

new が使える/使えない理由の違い

観点 new が使える new が使えない
設計 インスタンス生成 名前空間
状態 持つ 持たない
this 使用する 使用しない
主な役割 データ保持 処理・変換

👉 「状態を持つかどうか」 が決定的な違いです。

DateMath の比較

Date(new が必要)

const now = new Date();
  • 時刻という状態を保持
  • インスタンスごとに異なる値を持つ

Math(new 不可)

Math.random();
  • 計算処理のみ
  • 状態を持たない
  • 1つだけあれば十分

活用例

1. 状態を持つ処理では new を使う(Map

const userMap = new Map();

userMap.set("id", 1);
userMap.set("name", "Taro");

console.log(userMap.get("name")); // Taro
  • データを保持・更新する必要がある
  • インスタンスを生成する意味がある

2. 計算・変換処理では new を使わない(Math

const numbers = [3, 8, 1];

const max = Math.max(...numbers);
console.log(max); // 8
  • 状態を持たない
  • 関数として呼び出すだけで完結

3. 非同期処理の状態管理では new を使う(Promise

const promise = new Promise((resolve) => {
  setTimeout(() => resolve("done"), 1000);
});

promise.then(result => console.log(result));
  • pending / fulfilled / rejected という状態を持つ
  • インスタンスごとに処理の流れが異なる

4. エラー情報を保持する場合は new を使う(Error

function divide(a, b) {
  if (b === 0) {
    throw new Error("0で割ることはできません");
  }
  return a / b;
}
  • メッセージやスタックトレースという状態を保持

5. 文字列変換は new を使わない(JSON

const obj = { id: 1, name: "Taro" };

const json = JSON.stringify(obj);
const parsed = JSON.parse(json);

console.log(parsed.name); // Taro
  • 状態を持たず、変換処理のみを提供

6. 判断基準としての実践的ルール

・データを保持したい → new を検討
・計算や変換だけ → new は不要
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?