Reflect
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 æ¯ä¸ä¸ªå
ç½®ç对象ï¼å®æä¾æ¦æª JavaScript æä½çæ¹æ³ãè¿äºæ¹æ³ä¸ proxy handler çæ¹æ³ç¸åãReflect 䏿¯ä¸ä¸ªå½æ°å¯¹è±¡ï¼å æ¤å®æ¯ä¸å¯æé çã
æè¿°
ä¸å¤§å¤æ°å
¨å±å¯¹è±¡ä¸å Reflect å¹¶éä¸ä¸ªæé 彿°ï¼æä»¥ä¸è½éè¿ new è¿ç®ç¬¦å¯¹å
¶è¿è¡è°ç¨ï¼æè
å° Reflect 对象ä½ä¸ºä¸ä¸ªå½æ°æ¥è°ç¨ãReflect çææå±æ§åæ¹æ³é½æ¯éæçï¼å°±å Math 对象ï¼ã
Reflect 对象æä¾äºä»¥ä¸éææ¹æ³ï¼è¿äºæ¹æ³ä¸ proxy handler æ¹æ³çå½åç¸åã
éææ¹æ³
Reflect.apply(target, thisArgument, argumentsList)-
对ä¸ä¸ªå½æ°è¿è¡è°ç¨æä½ï¼åæ¶å¯ä»¥ä¼ å ¥ä¸ä¸ªæ°ç»ä½ä¸ºè°ç¨åæ°ãå
Function.prototype.apply()åè½ç±»ä¼¼ã Reflect.construct(target, argumentsList[, newTarget])-
对æé 彿°è¿è¡
newæä½ï¼ç¸å½äºæ§è¡new target(...args)ã Reflect.defineProperty(target, propertyKey, attributes)-
å
Object.defineProperty()类似ãå¦æè®¾ç½®æåå°±ä¼è¿åtrue Reflect.deleteProperty(target, propertyKey)-
ä½ä¸ºå½æ°ç
deleteæä½ç¬¦ï¼ç¸å½äºæ§è¡delete target[name]ã Reflect.get(target, propertyKey[, receiver])-
è·åå¯¹è±¡èº«ä¸æä¸ªå±æ§çå¼ï¼ç±»ä¼¼äº
target[name]ã Reflect.getOwnPropertyDescriptor(target, propertyKey)-
类似äº
Object.getOwnPropertyDescriptor()ãå¦æå¯¹è±¡ä¸åå¨è¯¥å±æ§ï¼åè¿å对åºç屿§æè¿°ç¬¦ï¼å¦åè¿åundefinedã Reflect.getPrototypeOf(target)-
类似äº
Object.getPrototypeOf()ã Reflect.has(target, propertyKey)-
夿ä¸ä¸ªå¯¹è±¡æ¯å¦åå¨æä¸ªå±æ§ï¼å
inè¿ç®ç¬¦ çåè½å®å ¨ç¸åã Reflect.isExtensible(target)-
类似äº
Object.isExtensible(). Reflect.ownKeys(target)-
è¿åä¸ä¸ªå 嫿æèªèº«å±æ§ï¼ä¸å å«ç»§æ¿å±æ§ï¼çæ°ç»ã(类似äº
Object.keys(), ä½ä¸ä¼åenumerableå½±å). Reflect.preventExtensions(target)-
类似äº
Object.preventExtensions()ãè¿åä¸ä¸ªBooleanã Reflect.set(target, propertyKey, value[, receiver])-
å°å¼åé ç»å±æ§ç彿°ãè¿åä¸ä¸ª
Booleanï¼å¦ææ´æ°æåï¼åè¿åtrueã Reflect.setPrototypeOf(target, prototype)-
设置对象ååç彿°ãè¿åä¸ä¸ª
Booleanï¼å¦ææ´æ°æåï¼åè¿åtrueã
Examples
>æ£æµä¸ä¸ªå¯¹è±¡æ¯å¦åå¨ç¹å®å±æ§
const duck = {
name: 'Maurice',
color: 'white',
greeting: function() {
console.log(`Quaaaack! My name is ${this.name}`);
}
}
Reflect.has(duck, 'color');
// true
Reflect.has(duck, 'haircut');
// false
è¿åè¿ä¸ªå¯¹è±¡èªèº«ç屿§
Reflect.ownKeys(duck); // [ "name", "color", "greeting" ]
为è¿ä¸ªå¯¹è±¡æ·»å ä¸ä¸ªæ°ç屿§
Reflect.set(duck, 'eyes', 'black'); // returns "true" if successful // "duck" now contains the property "eyes: 'black'"
è§è
| Specification |
|---|
| ECMAScript® 2027 Language Specification > # sec-reflect-object > |