李恒道 发表于 2021-8-4 02:11:56

[油猴脚本开发指南]Reflect的使用

# **Reflect是什么?**

**Reflect与Proxy都同时在ES2015标准中,他是一个内置的对象,提供一些方法,这些方法与Proxy 的Handler中是相同的,他不是一个函数的对象,因此是不可构造的,我们只可以使用他的静态方法**

# **为什么存在Reflect?**

**通常我们将它与Proxy进行联合使用,在进行劫持后调用原方法,那为什么不直接操作对象呢?**

**这点我查阅了资料,认为存在两个原因**

**一是目前暴露了一些核心的api供我们调用,但是未来可能隐藏掉这些api,通过Reflect才能调用。**

**二是统一操作的过程,如果我们不使用Reflect提供的函数,而使用操作的函数进行对象操作,那有一部分对象操作失败会报出异常,有一部分会报出null等等,返回值并不统一,而Reflect相对统一,比如曾经错误会报出异常的函数,在Reflect内会返回false,使用Reflect我们可以对各种函数有一个更统一的返回值以及处理。**

# **Reflect的函数有哪些?**

### **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。**

### **Reflect.get(target, propertyKey[, receiver])**

**获取对象身上某个属性的值,类似于 target。**

### **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。**

陈公子的话 发表于 2021-8-4 03:00:29

ggnb      

王一之 发表于 2021-8-4 09:49:35

学习了

李恒道 发表于 2021-8-4 11:43:23

王一之 发表于 2021-8-4 09:49
学习了

哥哥你一个本来就会的学习了什么!

脚本体验师001 发表于 2021-8-4 12:37:02

哥哥是小母牛坐飞机,牛逼上天了,有没有具体点的使用事例

李恒道 发表于 2021-8-4 14:08:48

脚本体验师001 发表于 2021-8-4 12:37
哥哥是小母牛坐飞机,牛逼上天了,有没有具体点的使用事例

下节课有!Xhr返回内容劫持

水凛子 发表于 2021-8-4 15:10:38

积分规则改变了吗

李恒道 发表于 2021-8-4 15:19:27

水凛子 发表于 2021-8-4 15:10
积分规则改变了吗

好像是改了,我没动,可能一之哥哥改的,回头我问下

王一之 发表于 2021-8-4 17:52:09

水凛子 发表于 2021-8-4 15:10
积分规则改变了吗

是的 我改了一下
页: [1]
查看完整版本: [油猴脚本开发指南]Reflect的使用