Reflect API(動的操作) — Reflect.get(obj, 'k') / Reflect.set(...)
JavaScript の Reflect API は「オブジェクトを動的に操作するための便利な道具箱」です。
初心者は「オブジェクトのプロパティを安全に読んだり書いたりするための関数群」と覚えると理解しやすいです。Reflect.get や Reflect.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
JavaScriptReflect.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 と組み合わせると強力。
これを覚えれば「動的にプロパティを操作する」「安全に値を設定する」コードが書けるようになり、ライブラリやフレームワークの仕組みも理解しやすくなります。
