📜  JavaScript Reflect 完整参考(1)

📅  最后修改于: 2023-12-03 15:16:06.675000             🧑  作者: Mango

JavaScript Reflect 完整参考

Reflect 是 ECMAScript 6 引入的新的全局对象,包含了一系列静态方法,用于拦截和修改 JavaScript 操作。

Reflect 静态方法
Reflect.apply(target, thisArg, argumentsList)

该方法调用一个方法,传入给这个方法的参数是一个数组(或类数组对象)。第一个参数是要调用的函数本身,第二个参数是this值,第三个参数是要传入函数的参数。

Reflect.apply(target, thisArg, argumentsList)
  • target:调用函数。
  • thisArg:函数调用时的this值。
  • argumentsList:传递给函数的参数数组。
Reflect.construct(target, argumentsList[, newTarget])

该方法创建一个由指定构造函数创建的新实例对象。传入给该函数的参数是一个数组(或类数组对象)。 第一个参数是要创建的构造函数本身,第二个参数是要传入构造函数的参数。如果有第三个参数,则将其视为 new 运算符的 new.target。

Reflect.construct(target, argumentsList[, newTarget])
  • target:将用作构造函数的函数。
  • argumentsList:传递给构造函数的参数。
  • newTarget:该参数是新运算符的目标。如果未提供,则将构造函数用作其目标。
Reflect.defineProperty(target, propertyKey, attributes)

该方法可以配置一个对象的属性。相当于 Object.defineProperty(obj, prop, descriptor) 方法。

Reflect.defineProperty(target, propertyKey, attributes)
  • target:要设置属性的对象。
  • propertyKey:要设置的属性名称。
  • attributes:属性描述符对象。
Reflect.deleteProperty(target, propertyKey)

该方法删除一个对象的属性。相当于 delete obj[prop]。

Reflect.deleteProperty(target, propertyKey)
  • target:要删除属性的对象。
  • propertyKey:要删除的属性名称。
Reflect.get(target, propertyKey[, receiver])

该方法获取一个对象的某个属性值。就像使用 obj[prop] 获取一样。

Reflect.get(target, propertyKey[, receiver])
  • target:要获取属性的对象。
  • propertyKey:要获取的属性名称。
  • receiver:如果提供,则作为this值。
Reflect.getOwnPropertyDescriptor(target, propertyKey)

该方法返回一个对象的属性描述符。就像使用 Object.getOwnPropertyDescriptor(obj, prop) 一样。

Reflect.getOwnPropertyDescriptor(target, propertyKey)
  • target:要获取属性描述的对象。
  • propertyKey:要获取描述符的属性的名称。
Reflect.getPrototypeOf(target)

该方法返回一个对象的原型。就像使用 Object.getPrototypeOf(obj) 一样。

Reflect.getPrototypeOf(target)
  • target:要获取原型的对象。
Reflect.has(target, propertyKey)

该方法判断一个对象是否存在某个属性。就像使用 prop in obj 一样。

Reflect.has(target, propertyKey)
  • target:要判断是否存在属性的对象。
  • propertyKey:要判断是否存在的属性名称。
Reflect.isExtensible(target)

该方法判断一个对象是否可扩展。就像使用 Object.isExtensible(obj) 一样。

Reflect.isExtensible(target)
  • target:要判断是否可扩展的对象。
Reflect.ownKeys(target)

该方法返回一个对象的所有自身属性的属性名数组。就像使用 Object.getOwnPropertyNames(obj) 和 Object.getOwnPropertySymbols(obj) 一样。

Reflect.ownKeys(target)
  • target:要获取属性名称的对象。
Reflect.preventExtensions(target)

该方法将一个对象变为不可扩展状态。就像使用 Object.preventExtensions(obj) 一样。

Reflect.preventExtensions(target)
  • target:要变为不可扩展的对象。
Reflect.set(target, propertyKey, value[, receiver])

该方法将一个对象的属性设置为指定值。就像使用 obj[prop] = value 一样。

Reflect.set(target, propertyKey, value[, receiver])
  • target:要设置属性的对象。
  • propertyKey:要设置的属性名称。
  • value:要设置的属性值。
  • receiver:如果提供,则作为this值。
Reflect.setPrototypeOf(target, proto)

该方法设置一个对象的原型。就像使用 Object.setPrototypeOf(obj, proto) 一样。

Reflect.setPrototypeOf(target, proto)
  • target:要设置原型的对象。
  • proto:要为对象设置的原型对象。
Reflect 实例方法

除了上述的静态方法之外,Reflect 还暴露了一些实例方法。

fromEntries()

该方法将一个键值对数组转换为对象。就像使用 Object.fromEntries(entries) 一样。

Reflect.fromEntries(entries)
  • entries:一个键值对数组。
总结

Reflect 提供了一系列静态方法和实例方法,用于拦截和修改 JavaScript 操作。这些方法可以帮助我们更好地控制代码的执行流程,提升代码的性能和可读性。