---
title: Reflect
slug: Web/JavaScript/Reference/Global_Objects/Reflect
tags:
  - ECMAScript 2015
  - JavaScript
  - Overview
  - Reflect
translation_of: Web/JavaScript/Reference/Global_Objects/Reflect
---
{{JSRef}}
Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与proxy handlers的方法相同。Reflect不是一个函数对象,因此它是不可构造的。
描述
与大多数全局对象不同Reflect并非一个构造函数,所以不能通过new运算符对其进行调用,或者将Reflect对象作为一个函数来调用。Reflect的所有属性和方法都是静态的(就像{{jsxref("Math")}}对象)。
Reflect 对象提供了以下静态方法,这些方法与proxy handler methods的命名相同.
其中的一些方法与 {{jsxref("Object")}}相同, 尽管二者之间存在 某些细微上的差别 .
静态方法
 - {{jsxref("Reflect.apply()", "Reflect.apply(target, thisArgument, argumentsList)")}}
 
 - 对一个函数进行调用操作,同时可以传入一个数组作为调用参数。和 {{jsxref("Function.prototype.apply()")}} 功能类似。
 
 - {{jsxref("Reflect.construct()", "Reflect.construct(target, argumentsList[, newTarget])")}}
 
 - 对构造函数进行 
new  操作,相当于执行 new target(...args)。 
 - {{jsxref("Reflect.defineProperty()", "Reflect.defineProperty(target, propertyKey, attributes)")}}
 
 - 和 {{jsxref("Object.defineProperty()")}} 类似。如果设置成功就会返回 
true 
 - {{jsxref("Reflect.deleteProperty()", "Reflect.deleteProperty(target, propertyKey)")}}
 
 - 作为函数的
delete操作符,相当于执行 delete target[name]。 
 - {{jsxref("Reflect.get()", "Reflect.get(target, propertyKey[, receiver])")}}
 
 - 获取对象身上某个属性的值,类似于 
target[name]。 
 - {{jsxref("Reflect.getOwnPropertyDescriptor()", "Reflect.getOwnPropertyDescriptor(target, propertyKey)")}}
 
 - 类似于 {{jsxref("Object.getOwnPropertyDescriptor()")}}。如果对象中存在该属性,则返回对应的属性描述符,  否则返回 {{jsxref("undefined")}}.
 
 - {{jsxref("Reflect.getPrototypeOf()", "Reflect.getPrototypeOf(target)")}}
 
 - 类似于 {{jsxref("Object.getPrototypeOf()")}}。
 
 - {{jsxref("Reflect.has()", "Reflect.has(target, propertyKey)")}}
 
 - 判断一个对象是否存在某个属性,和 
in 运算符 的功能完全相同。 
 - {{jsxref("Reflect.isExtensible()", "Reflect.isExtensible(target)")}}
 
 - 类似于 {{jsxref("Object.isExtensible()")}}.
 
 - {{jsxref("Reflect.ownKeys()", "Reflect.ownKeys(target)")}}
 
 - 返回一个包含所有自身属性(不包含继承属性)的数组。(类似于 {{jsxref("Object.keys()")}}, 但不会受
enumerable影响). 
 - {{jsxref("Reflect.preventExtensions()", "Reflect.preventExtensions(target)")}}
 
 - 类似于 {{jsxref("Object.preventExtensions()")}}。返回一个{{jsxref("Boolean")}}。
 
 - {{jsxref("Reflect.set()", "Reflect.set(target, propertyKey, value[, receiver])")}}
 
 - 将值分配给属性的函数。返回一个{{jsxref("Boolean")}},如果更新成功,则返回
true。 
 - {{jsxref("Reflect.setPrototypeOf()", "Reflect.setPrototypeOf(target, prototype)")}}
 
 - 设置对象原型的函数. 返回一个 {{jsxref("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 | 
  
  
   | {{SpecName('ESDraft', '#sec-reflect-object', 'Reflect')}} | 
  
 
浏览器兼容
{{Compat("javascript.builtins.Reflect")}}
相关链接
 - {{jsxref("Proxy")}} 全局对象。
 
 - {{jsxref("Proxy.handler", "处理器")}} 对象。