JavaScript反射是什么意思,用法是怎样
Admin 2022-06-23 群英技术资讯 956 次浏览
这篇文章给大家分享的是“JavaScript反射是什么意思,用法是怎样”,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下吧。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() 类似。如果设置成功就会返回 trueReflect.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。比如现在有个函数:
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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
上下文是从英文context翻译过来,指的是一种环境。在软件工程中,上下文是一种属性的有序序列,它们为驻留在环境内的对象定义环境。在对象的激活过程中创建上下文,对象被配置为要求某些自动服务。又比如计算机技术中,相对于进程而言,上下文就是进程执行时的环境
JavaScript即将推出两个新的数据类型:Record 和 Tuple ,这俩是啥呢?其实就是一个只读的 Object 和 Array,其实在其它语言中已经有类似的数据类型了,例如 Python 中也有 Tuple(元祖)这一类型,作用也是一个只读的数组(在Python里叫只读的列表),一起来了解一下,这个特性是一个第2阶段提案(即差不多稳了),想要提前体验的,文末也有 polyfill 的使用教程!
本文实例为大家分享了vue递归实现树形组件的具体代码,供大家参考,具体内容如下1. 先来看一下效果:2. 代码部分 (myTree.vue)图片可以自己引一下自己的图片,或者使用iconfont的css引入。template div class=tree ul class=ul
本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了作用域链的相关内容,作用域是一套规则,负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限;下面一起来看一下,希望对大家有帮助。
在平时工作开发中,大部分开发人员都花费大量的时间在维护其他人员的代码。很难从头开始开发新代码,很多情况下都是以他人成果为基础的,或者新增修改需求,自己写的代码也会被其他开发人员调用,所以写好一份高质量可维护的代码就显得十分重要。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008