上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

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

[复制链接]

185

主题

1457

帖子

758

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
758
发表于 2021-8-4 02:11:56 | 显示全部楼层 | 阅读模式

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[name]。

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

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

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。

混的人。

138

主题

437

帖子

460

积分

版主

Rank: 7Rank: 7Rank: 7

积分
460

猫咪币纪念章三好学生活跃会员热心会员突出贡献中秋纪念章国庆纪念章宣传达人推广达人

发表于 2021-8-4 03:00:29 | 显示全部楼层
ggnb      
bilibili:陈公子的话   公众号:陈公子的话
回复

使用道具 举报

99

主题

1027

帖子

757

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
757

猫咪币纪念章热心会员活跃会员突出贡献三好学生中秋纪念章国庆纪念章

发表于 2021-8-4 09:49:35 | 显示全部楼层
学习了
上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
回复

使用道具 举报

185

主题

1457

帖子

758

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
758
发表于 2021-8-4 11:43:23 | 显示全部楼层

哥哥你一个本来就会的学习了什么!
混的人。
回复

使用道具 举报

5

主题

120

帖子

48

积分

注册会员

Rank: 2

积分
48

中秋纪念章猫咪币纪念章活跃会员热心会员三好学生

发表于 2021-8-4 12:37:02 来自手机  | 显示全部楼层
哥哥是小母牛坐飞机,牛逼上天了,有没有具体点的使用事例
回复

使用道具 举报

185

主题

1457

帖子

758

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
758
发表于 2021-8-4 14:08:48 | 显示全部楼层
脚本体验师001 发表于 2021-8-4 12:37
哥哥是小母牛坐飞机,牛逼上天了,有没有具体点的使用事例

下节课有!Xhr返回内容劫持
混的人。
回复

使用道具 举报

11

主题

196

帖子

102

积分

版主

Rank: 7Rank: 7Rank: 7

积分
102

猫咪币纪念章活跃会员中秋纪念章国庆纪念章

发表于 2021-8-4 15:10:38 | 显示全部楼层
积分规则改变了吗
回复

使用道具 举报

185

主题

1457

帖子

758

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
758
发表于 2021-8-4 15:19:27 | 显示全部楼层
水凛子 发表于 2021-8-4 15:10
积分规则改变了吗

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

使用道具 举报

99

主题

1027

帖子

757

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
757

猫咪币纪念章热心会员活跃会员突出贡献三好学生中秋纪念章国庆纪念章

发表于 2021-8-4 17:52:09 | 显示全部楼层
水凛子 发表于 2021-8-4 15:10
积分规则改变了吗

是的 我改了一下
上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
回复

使用道具 举报

发表回复

本版积分规则

快速回复 返回顶部 返回列表