JavaScript 反射学习技巧


Posted in Javascript onOctober 16, 2021

1、前言

根据 MDN 官网解释: Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与 proxy handlers (en-US) 的方法相同。 Reflect 不是一个函数对象,因此它是不可构造的。

那么它到底是什么?根据上面文件介绍会发现它和 Proxy 极像,都是获取执行函数本身信息。主要是区别在于所有的函数对象属性过于复杂,而且额外增加可能会导致程序行为不合理,所以扩展 Reflect 函数来专门对函数对象处理调用方法,构造对象,获取或者设置属性等相关操作。

2、接口

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

3、简单的例子

比如现在有个函数:

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

4、结语

Reflect 对象经常和 Proxy 代理一起使用,原因有三点:

  • Reflect 提供的所有静态方法和 Proxy 第2个 handle 参数方法是一模一样的。
  • Proxy get/set() 方法需要的返回值正是 Reflectget/set 方法的返回值,可以天然配合使用,比直接对象赋值/获取值要更方便和准确。
  • receiver 参数具有不可替代性。

到此这篇关于JavaScript 反射学习技巧的文章就介绍到这了,更多相关JavaScript 反射内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
Nov 06 Javascript
实例讲解javascript注册事件处理函数
Jan 09 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
Jan 21 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
Jun 22 Javascript
js中开关变量使用实例
Feb 24 Javascript
angularjs中使用ng-bind-html和ng-include的实例
Apr 28 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
May 22 Javascript
js实现图片上传并预览功能
Aug 06 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
Jun 17 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
Jul 14 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
Jul 17 Javascript
vue打包时去掉所有的console.log
Apr 10 Vue.js
JS的深浅复制详细
Oct 16 #Javascript
JS 基本概念详细介绍
Oct 16 #Javascript
AJAX实现指定部分页面刷新效果
AJAX实现省市县三级联动效果
Oct 16 #Javascript
简单聊聊Vue中的计算属性和属性侦听
Oct 05 #Vue.js
JS中如何优雅的使用async await详解
Oct 05 #Javascript
js中Object.create实例用法详解
Oct 05 #Javascript
You might like
整合了前面的PHP数据库连接类~~做成一个分页类!
2006/11/25 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
De facto standard 世界上不可思议的事实标准
2010/08/29 Javascript
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
2011/05/24 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
分享使用AngularJS创建应用的5个框架
2015/12/05 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
python将字符串转换成数组的方法
2015/04/29 Python
Python实现最大子序和的方法示例
2019/07/05 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
最新pycharm安装教程
2020/11/18 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
Aveda美国官网:天然护发产品、洗发水、护发素和沙龙
2016/12/09 全球购物
彪马英国官网:PUMA英国
2019/02/11 全球购物
美国名牌香水折扣网站:Hottperfume
2021/02/10 全球购物
金融专业推荐信
2013/11/14 职场文书
文秘专业应届生求职信范文
2013/11/14 职场文书
消防安全标语
2014/06/07 职场文书
志愿者活动总结报告
2014/06/27 职场文书
临床医学专业求职信
2014/08/08 职场文书
假期安全教育广播稿
2014/10/04 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
大学生党性分析材料
2014/12/19 职场文书
主持人开幕词
2015/01/29 职场文书
讲座通知范文
2015/04/23 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL
使用JS实现简易计算器
2021/06/14 Javascript