多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### 概述 `Reflect`对象与`Proxy`对象一样,也是ES6为了操作对象而提供的新的API。它的设计目标如下: - 将`Object`对象的一些明显属于语言内部的方法(比如:Object.defineProperty),放到`Reflect`对象上。 - 修改某些`Object`方法的返回结果,使其变的更加合理。 - 让`Object`操作都变成函数行为。 - `Reflect`对象的方法与`Proxy`对象 的方法一一对应,只要是`Proxy`对象的方法,就能在`Reflect`对象上找到对应的方法。 ### 静态方法 `Reflect`对象一共有13个静态方法: #### Reflect.get(target, name, receiver) `Reflect.get`方法查找并返回`target`对象的`name`属性,如果没有找到则返回`undefined` ```js let myObject = { foo: 1, bar: 2, get baz () { return this.foo + this.bar } } Reflect.get(myObject, 'foo') // 1 Reflect.get(myObject, 'bar') // 2 Reflect.get(myObject, 'baz') // 3 ``` #### Reflect.set(target, name, value, receiver) `Reflect.set`方法设置`target`对象的`name`属性为`value` ```js let myObject = { foo: 1, set bar (value) { return this.foo = value } } myObject.foo // 1 Reflect.set(myObject, 'foo', 2) myObject.foo // 2 Reflect.set(myObject, 'bar', 3) myObjedct.foo // 3 ``` #### Reflect.has(obj, name) `Reflect.has`方法对应`in`操作 #### Reflect.deleteProperty(obj, name) `Reflect.deleteProperty`方法等同于`delete obj[name]`,用于删除对象的属性 #### Reflect.construct(target, args) `Reflect.construct`方法等同于`new target(...args)`,提供了一种不适用`new`来调用构造函数的方法。 #### Reflect.getPrototypeOf(obj) `Reflect.getPrototpyeOf`方法用于读取对象的`__proto__`属性,对应`Object.getPrototypeOf(obj)` #### Reflect.setPrototypeOf(obj, newProto) #### Reflect.apply(func, thisArg, args) #### Reflect.defineProperty(target, propertyKey, attributes) #### Reflect.getOwnPropertyDescriptor(target.propertyKey) #### Reflect.isExtensible(target) #### Reflect.preventExtentsions(target)