[油猴脚本开发指南]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。**
ggnb 学习了 王一之 发表于 2021-8-4 09:49
学习了
哥哥你一个本来就会的学习了什么! 哥哥是小母牛坐飞机,牛逼上天了,有没有具体点的使用事例 脚本体验师001 发表于 2021-8-4 12:37
哥哥是小母牛坐飞机,牛逼上天了,有没有具体点的使用事例
下节课有!Xhr返回内容劫持 积分规则改变了吗 水凛子 发表于 2021-8-4 15:10
积分规则改变了吗
好像是改了,我没动,可能一之哥哥改的,回头我问下 水凛子 发表于 2021-8-4 15:10
积分规则改变了吗
是的 我改了一下
页:
[1]