Reflect.set()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2016å¹´9æ.
Reflect.set() ã¯éçã¡ã½ããã§ãããããã£ã¢ã¯ã»ãµã¼ããã³ä»£å
¥æ§æã«ä¼¼ã¦ãã¾ããã颿°ã¨ãã¦å®è£
ããã¦ãã¾ãã
試ãã¦ã¿ã¾ããã
const object = {};
Reflect.set(object, "foo", 42);
console.log(object.foo);
// äºæ³ãããçµæ: 42
const array = ["duck", "duck", "duck"];
Reflect.set(array, 2, "goose");
console.log(array[2]);
// äºæ³ãããçµæ: "goose"
æ§æ
Reflect.set(target, propertyKey, value)
Reflect.set(target, propertyKey, value, receiver)
弿°
target-
ããããã£ãè¨å®ãã対象ã®ãªãã¸ã§ã¯ãã
propertyKey-
è¨å®ããããããã£åã
value-
è¨å®ããå¤ã
receiverçç¥å¯-
targetã®propertyKeyã«å¯¾ããã»ãã¿ã¼å¼ã³åºãã«æå®ãããthisã®å¤ã§ããæå®ããããã¤targetãpropertyKeyã®ã»ãã¿ã¼ãæããªãå ´åã代ããã«receiverã«ããããã£ãè¨å®ããã¾ãã
è¿å¤
ããããã£ãæåè£ã«è¨å®ã§ãããã©ããã示ãè«çå¤ (Boolean)ã
ä¾å¤
TypeError-
targetããªãã¸ã§ã¯ãã§ã¯ãªãå ´åã«çºçãã¾ãã
解説
Reflect.set() ã¯ãããããã£ã¢ã¯ã»ã¹ ã®åå°çæå³ã¥ããæä¾ãã¾ããã¤ã¾ããReflect.set(target, propertyKey, value, receiver) ã¯æå³ã¥ãçã«æ¬¡ã®ãã®ã¨åçã§ãã
target[propertyKey] = value;
é常ã®ããããã£ã¢ã¯ã»ã¹ã§ã¯ãtarget 㨠receiver ã¯æããã«åä¸ã®ãªãã¸ã§ã¯ãã§ãããã¨ã«æ³¨æãã¦ãã ããã
Reflect.set() ã¯ãtarget ã® [[Set]] ãªãã¸ã§ã¯ãå
é¨ã¡ã½ãã ãå¼ã³åºãã¾ãã
ä¾
>Reflect.set() ã®ä½¿ç¨
// ãªãã¸ã§ã¯ã
const obj = {};
Reflect.set(obj, "prop", "value"); // true
obj.prop; // "value"
// é
å
const arr = ["duck", "duck", "duck"];
Reflect.set(arr, 2, "goose"); // true
arr[2]; // "goose"
// é
åãåãè©°ããããã
Reflect.set(arr, "length", 1); // true
arr; // ["duck"]
// 弿°ã1ã¤ã ãã ã¨ãããããã£ãã¼ã¨å¤ã¯ "undefined" ã«ãªãã
Reflect.set(obj); // true
Reflect.getOwnPropertyDescriptor(obj, "undefined");
// { value: undefined, writable: true, enumerable: true, configurable: true }
target 㨠receiver ã®éã
target 㨠receiver ãç°ãªãå ´åãReflect.set 㯠target ã®ããããã£è¨è¿°åã使ç¨ãã¾ãï¼ã»ãã¿ã¼ãæ¢ããããããããã£ãæ¸ãè¾¼ã¿å¯è½ãã©ããã®å¤å®ããããããããï¼ããã ããããããã£ã®è¨å®ã¯ receiver ã«å¯¾ãã¦è¡ãã¾ãã
const target = {};
const receiver = {};
Reflect.set(target, "a", 2, receiver); // true
// target 㯠{}; receiver 㯠{ a: 2 }
const target = { a: 1 };
const receiver = {};
Reflect.set(target, "a", 2, receiver); // true
// target 㯠{ a: 1 }; receiver 㯠{ a: 2 }
const target = {
set a(v) {
this.b = v;
},
};
const receiver = {};
Reflect.set(target, "a", 2, receiver); // true
// target 㯠{ a: [Setter] }; receiver 㯠{ b: 2 }
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-reflect.set> |