JavaScript 逆引き集 | Reflect API(動的操作)

JavaScript JavaScript
スポンサーリンク

Reflect API(動的操作) — Reflect.get(obj, 'k') / Reflect.set(...)

JavaScript の Reflect API は「オブジェクトを動的に操作するための便利な道具箱」です。
初心者は「オブジェクトのプロパティを安全に読んだり書いたりするための関数群」と覚えると理解しやすいです。
Reflect.getReflect.set は、obj[key]obj[key] = value と同じことをしますが、関数として呼び出せるので柔軟に使えるのが特徴です。


基本のコード例

const obj = { k: 123 };

// プロパティを取得
console.log(Reflect.get(obj, "k")); // → 123

// プロパティを設定
Reflect.set(obj, "k", 456);
console.log(obj.k); // → 456
JavaScript
  • Reflect.get(obj, key)obj[key] と同じ。
  • Reflect.set(obj, key, value)obj[key] = value と同じ。

よく使うテンプレート集

動的にキーを指定してアクセス

const obj = { name: "Aki", age: 20 };

function printProp(o, key) {
  console.log(Reflect.get(o, key));
}

printProp(obj, "name"); // → "Aki"
printProp(obj, "age");  // → 20
JavaScript

動的に値を設定

function setProp(o, key, value) {
  Reflect.set(o, key, value);
}

const user = {};
setProp(user, "id", 100);
console.log(user.id); // → 100
JavaScript

存在しないキーでも安全に扱える

const obj = {};
console.log(Reflect.get(obj, "x")); // → undefined
Reflect.set(obj, "x", 10);
console.log(obj.x); // → 10
JavaScript

例題: プロパティをコピーする関数

function copyProp(src, dest, key) {
  const value = Reflect.get(src, key);
  Reflect.set(dest, key, value);
}

const a = { x: 1 };
const b = {};
copyProp(a, b, "x");

console.log(b.x); // → 1
JavaScript
  • 効果: Reflect を使うと「キーを文字列で受け取って動的にコピー」できる。

実務でのコツ

  • 動的操作に便利: キー名を変数で受け取って処理する場面で役立つ。
  • 安全性: Reflect は失敗したときに false を返すことがある(例: 書き込み禁止プロパティ)。
  • Proxy と組み合わせる: Reflect は Proxy のハンドラ内でよく使われる。

ありがちなハマりポイントと対策

  • 通常の obj[key] と違い関数形式:
    • Reflect.get(obj, key) のように必ずオブジェクトとキーを渡す。
  • 返り値が false の場合がある:
    • Reflect.set は成功すれば true、失敗すれば false を返す。

練習問題(安全な更新関数)

function safeUpdate(obj, key, value) {
  if (Reflect.set(obj, key, value)) {
    console.log("更新成功:", obj);
  } else {
    console.log("更新失敗");
  }
}

const user = { name: "Mika" };
safeUpdate(user, "name", "Aki"); // → 更新成功: { name: "Aki" }
JavaScript

直感的な指針

  • Reflect.get(obj, key) = プロパティを動的に取得。
  • Reflect.set(obj, key, value) = プロパティを動的に設定。
  • 通常の obj[key] と同じだが、関数形式なので柔軟。
  • Proxy と組み合わせると強力。

これを覚えれば「動的にプロパティを操作する」「安全に値を設定する」コードが書けるようになり、ライブラリやフレームワークの仕組みも理解しやすくなります。

タイトルとURLをコピーしました