JavaScript反射是什么意思,用法是怎样
Admin 2022-06-23 群英技术资讯 527 次浏览
Reflect
是一个内置的对象,它提供拦截 JavaScript
操作的方法。这些方法与 proxy handlers (en-US) 的方法相同。 Reflect
不是一个函数对象,因此它是不可构造的。那么它到底是什么?根据上面文件介绍会发现它和 Proxy
极像,都是获取执行函数本身信息。主要是区别在于所有的函数对象属性过于复杂,而且额外增加可能会导致程序行为不合理,所以扩展 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\])
将值分配给属性的函数。返回一个 Boole
an ,如果更新成功,则返回 true
。Reflect.setPrototypeOf(target, prototype)
设置对象原型的函数. 返回一个 Boolean
, 如果更新成功,则返回 true
。比如现在有个函数:
class Person { constructor(firstName, lastName) { this.firstName = firstName this.lastName = lastName } get getName() { return this.firstName + ' ' + this.lastName } }
正常使用只需要进行实例化即可:
const person = new Person('Jaxson', 'Wang') console.log(person.getName) // Jaxson Wang
可以使用 Reflect.construct() 方法来创建对象:
const person = Reflect.construct(Person, ['Jaxson', 'Wang']) console.log(person) // Jaxson Wang
Reflect 对象经常和 Proxy 代理一起使用,原因有三点:
Reflect
提供的所有静态方法和 Proxy
第2个 handle
参数方法是一模一样的。Proxy get/set()
方法需要的返回值正是 Reflect
的get/set
方法的返回值,可以天然配合使用,比直接对象赋值/获取值要更方便和准确。receiver
参数具有不可替代性。免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
拖拽元素的需求还是比较常见的,之前我们也了解过拖拽元素,这篇文章给大家分享的是用jQuery实现容器间的元素拖拽效果,具体怎样做呢?我们直接看代码:
基于element-plus的二次封装数据双向绑定在实际开发中,经常需要基于element-plus封装一些自己的定制化组件,方便快速构建我们当前的业务。在vue2.0中父子组件数据的双向绑定通
node.js怎样实现断点续传?首先,断点续传怎样理解呢?一般,如果是一些只有几M的图片或者文件,我们将它们上传的到服务器是上是很快的,但是如果是几百M或者几G的文件,那么上传到服务器的时间就会更久,如果这期间文件有断网或者网络差要重新下载情况,那么得多人抓狂呀!而使用切片+断点续传就能够很好应对这样的情况。那么具体怎样做呢?下面跟随小编一起来详细了解看看吧。
这篇文章给大家分享的是有关vue中tab切换页面实现的内容,tab切换页面的应用场景有很多,小编觉得挺实用的,因此分享给大家做个参考,下面是四种实现tab切换页面的方法,感兴趣的朋友可以参考。
使用node.js怎么样实现发送邮件提醒?邮件在学习和工作中的使用还是比较多的,有时候我们需要定期的发送一些邮件,而要确保能按时发送不忘记,定时自动邮件提醒功能还是很关键的,下面我们就来看看这个功能要怎样做?
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008