Reflect

Reflect

Reflect拥有Object对象的一些内部方法,某些方法会同时在Object对象和Reflect对象上部署,也就是说Object对象上存在的方法,通过Reflect也可以访问到。
单论Reflect的话,可以这么理解,Reflect就是继承了Object的某些内置方法,并且提供了优化

Object对象上的某些方法会有些缺陷,例如:在Object.defineProperty·上对一个不可写或不可枚举的属性进行getter或setter时会抛出错误。
对于这个错误,我们需要try catch去捕获,而Reflect.defineProperty则会抛出false来表示本次操作失败(Reflect对对象的操作都会抛出true和false来表示是否操作成功)。

Object

const obj = { name : '东方不败' }
Object.defineProperty(obj,'age',{value : 100,writable : true,  // 只读configurable : false  // 不可删除和修改
})Object.defineProperty(obj,'age',{get(){ return 200 }
})
console.log(obj.age); //  TypeError : Cannot redefine property: age
// 报错,不能重新定义属性

Reflect

const obj2 = { name : '西方求败' }
Object.defineProperty(obj2,'age',{value : 100,writable : true,  // 只读configurable : false  // 不可删除和修改
})let status = Reflect.defineProperty(obj2,'age',{get(){ return }
})console.log(status); //  false
console.log(obj2.age); // 100
// Reflect会抛出false表示此次操作失败

总结

  1. 将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上。现阶段,某些方法同时在Object和Reflect对象上部署,未来的新方法将只部署在Reflect对象上。也就是说,从Reflect对象上可以拿到语言内部的方法。

  2. 修改某些Object方法的返回结果,让其变得更合理。比如,Object.defineProperty(obj, name, desc)在无法定义属性时,会抛出一个错误,而Reflect.defineProperty(obj, name, desc)则会返回false。

  3. 让Object操作都变成函数行为。某些Object操作是命令式,比如name in objdelete obj[name],而Reflect.has(obj, name)Reflect.deleteProperty(obj, name)让它们变成了函数行为。

  4. Reflect对象的方法与Proxy对象的方法一一对应,只要是Proxy对象的方法,就能在Reflect对象上找到对应的方法。这就让Proxy对象可以方便地调用对应的Reflect方法,完成默认行为,作为修改行为的基础。也就是说,不管Proxy怎么修改默认行为,你总可以在Reflect上获取默认行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/623838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python、nlp】文本预处理

文本预处理及其作用: 文本语料在输送给模型前一般需要一系列的预处理工作,才能符合模型输入的要求,如:将文本转化成模型需要的张量,规范张量的尺寸等,而且科学的文本预处理环节还将有效指导模型超参数的选…

富文本使用总结

多种富文本 一、Tinymce富文本 踩坑:disabled和readonly效果问题 解决方法: 【Tinymce富文本】如何实现disabled和readonly效果_tinymce disabled-CSDN博客 二、vue-quill-editor富文本 官方链接: vue-quill-editor Quill官方中文文档…

【Leetcode】232. 用栈实现队列

【Leetcode】232. 用栈实现队列 题目链接代码 题目链接 【Leetcode】232. 用栈实现队列 代码 type MyQueue struct {A []intB []int }func Constructor() MyQueue {return MyQueue{} }func (this *MyQueue) Push(x int) {this.A append(this.A, x) }func (this *MyQueue…

面向对象三大特征之三:多态--java学习笔记

什么是多态 多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态 对象多态:举个栗子,比如一个人,他可以是一个老师,也可以是一个歌手,也可以是一个丈夫...... 行为多态:举…

Chrome 插件匹配模式(Match patterns)规则

匹配模式&#xff08;Match patterns&#xff09; 一、匹配模式结构 匹配模式是采用以下结构的网址&#xff0c;用于指定一组网址&#xff1a; <scheme>://<host>/<path>1. scheme 必须是以下内容之一&#xff0c;并使用双斜线 (//) 与格式的其余部分分隔…

PHP反序列化总结4--原生类总结

原生类的简要介绍以及原生类和反序列化的关系 PHP 原生类指的是 PHP 内置的类&#xff0c;它们可以直接在 PHP 代码中使用且无需安装或导入任何库&#xff0c;相当于代码中的内置方法例如echo &#xff0c;print等等可以直接调用&#xff0c;但是原生类就是可以就直接php中直接…

git手册

问题场景​ 不同git remote之间代码同步 git checkout remote1 branch git checkout remote2 branch git merge remote1 branch git push 已经在git索引记录&#xff0c;现在不想要在git管理 提交git删除提交.gitignore修改本地新增该文件 本地仓库重置为与远程分支一致 …

jmeter分布式服务搭建

目录 一、环境准备 二、 安装包下载 三 、安装jdk 四 、控制机安装 4.1 解压压缩包 4.2 修改 bin/jmeter.properties 4.3 修改 bin/system.properties 五、执行机安装 5.1 解压安装包 5.2 修改 bin/jmeter.properties 5.3 修改 bin/system.properties 5.4 启动执行机 …

关于如何禁用、暂停或退出OneDrive等操作,看这篇文件就够了

​想知道如何禁用OneDrive?你可以暂停OneDrive的文件同步,退出应用程序,阻止它在启动时打开,或者永远从你的机器上删除该应用程序。我们将向你展示如何在Windows计算机上完成所有这些操作。 如何在Windows上关闭OneDrive 有多种方法可以防止OneDrive在你的电脑上妨碍你。…

堆排序——高效解决TOP-K问题

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 引言什么是堆&#xff1f;建堆堆排序&#xff1a;排序的最终结果 堆排序实现函数声明交换函数 Swap下沉调整 DnAdd堆排序函数 HeapSort主函数 文件中找…

SpringBoot+Vue实现对称加密和非对称加密

我们先来了解一下什么是对称加密和非对称加密&#xff0c;以及两者的优缺点 对称加密 使用同一个密钥对消息进行加密解密 优点&#xff1a;加密和解密的速度快&#xff0c;适合于数据量大的加解密 缺点&#xff1a;密钥在网络传输中可能被泄露&#xff0c;因此安全性相对较低…

C++核心编程三:函数提高(持续更新)

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;C从基础到进阶 &#x1f319;C核心编程&#x1f30f;1 函数提高&#x1f384;1.1 函数默认参数&#x1f384;1.2 函数占位参数&#x1f384;1.3 函数重载&#x1f349;1.3.1 函数重载概述&…

What is `@RequestBody ` does?

RequestBody 是SpringMVC框架中的注解&#xff0c;通常与POST、PUT等方法配合使用。当客户端发送包含JSON或XML格式数据的请求时&#xff0c;可以通过该注解将请求体内容绑定到Controller方法参数上 作用 自动反序列化&#xff1a; SpringMVC会根据RequestBody注解的参数类型&…

CentOS 安装python

为了调用OpenAI接口 租了个香草云服务器&#xff08;CentOS&#xff09; 现在需要用Python(最好3.7以上)来调用API接口 需要下载FinalShell.exe 或者其它工具 来执行以下命令 下载Python3.12.1 选好下载目录 wget https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tar.…

护眼灯有蓝光吗?防蓝光护眼台灯推荐

护眼台灯是家长为孩子购买的常见用品之一&#xff0c;但对于它的了解却不够深入&#xff0c;很多人购买之后反而容易出现眼睛疲劳、不适的情况&#xff01;据了解&#xff0c;主要的原因是因为在选择护眼台灯时&#xff0c;大多数人没有专业知识&#xff0c;没有买到合适的护眼…

Java中的性能优化:深入剖析常见优化技巧

引言 在现代软件开发中&#xff0c;性能优化是一个至关重要的话题。Java作为一门强大而广泛使用的编程语言&#xff0c;也需要开发者关注和优化性能&#xff0c;以确保应用程序能够在各种场景下高效运行。本文将深入剖析Java中的一些常见性能优化技巧&#xff0c;为开发者提供…

012集:三目运算符实例讲解(if else)及for、while循环—python基础入门实例

Python也有自己的三目运算符&#xff1a; 条件为真时的结果 if 判段的条件 else 条件为假时的结果 即&#xff1a;Python可以通过if语句来实现三目运算符的功能&#xff0c;因此可以把这种if语句当做三目运算符&#xff0c;具体语法格式如下&#xff1a; 返回True执行 if 表达…

Github搭建图床 github搭建静态资源库 免费CDN加速 github搭建图床使用 jsdelivr CDN免费加速访问

Github搭建图床 github搭建静态资源库 免费CDN加速 github搭建图床使用 jsdelivr CDN免费加速访问 前言1、创建仓库2、开启 gh-pages页面功能3、访问测试 前言 写博客文章时&#xff0c;图片的上传和存放是一个问题&#xff0c;使用小众第三方图床&#xff0c;怕不稳定和倒闭&…

.net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别

//全局过滤器 builder.Services.AddMvc(m > { m.Filters.Add<AllResultFilter>(); }); 1、实现过滤器 public class AllResultFilter : IResultFilter {/// <summary>/// 结果执行后方法/// 不可更改结果/// </summary>/// <param name"con…

独立按键控制直流电机调速

/*----------------------------------------------- 内容&#xff1a;对应的电机接口需用杜邦线连接到uln2003电机控制端 使用5V-12V 小功率电机皆可 2个按键分别加速和减速 ------------------------------------------------*/ #include<reg52.h> //包含头文…