Reflect是一个内置方法,并不能通过构造函数的来进行构建

Reflect.construct:

与new操作父有一些类似,相当于new target(...)

例:

我们先自己定义一个类

  1. class Box{
    constructor(...arg){
    Object.assign(this,{a:1,arr:[...arg]})
    }
    play(){
    console.log("play")
    }
    }
    然后通过new操作父来创建一个实例
  1. let box=new Box()
    console.log(box)
    box.play()

然后在通过Reflect.construct来创建一个实例

  1. let boxs=Reflect.construct(Box,[])
    console.log(boxs)
    boxs.play()

可以看出来两者基本没有区别,通过Reflect的方法创建出来的实例也可以调用构造函数中的方法。但注意:使用Reflect.construct必须要传入一个数组作为参数。对象理论上也可以,但是在构造函数内部对象并能够使用。

Reflect.construct还可以实现对象的创建,这点和Object.create有一些类似

  1. function one() {
    this.a=1
    }
    function two() {
    this.a=2
    }
  1. let obj=Object.create(one.prototype)
    one.apply(obj)
    console.log(obj.a) //1

  1. let objs=Reflect.construct(one,[]) one函数中的this会自动绑定到objs
    console.log(objs.a) //1

    Reflect.defineProperty
    基本等同于 Object.defineProperty() 方法,唯一不同是返回 Boolean 值。
    如过一个属性被成功定义,那么返回true,否则返回false
  1. let obj={
    name:"mayu"
    }
    let bool=Reflect.defineProperty(obj,"name",{
    value:"liming"
    })
    console.log(bool,obj.name) // true,"liming"
  1. 可以在定义属性时进行一些操作
    if(bool){
    //...
    }else{
    //...
    }
    Reflect.deleteProperty
    delete 类似,都是删除某一个属性,同样也是返回一个bool值,删除成功返回true,失败false
    Reflect.deleteProperty(要删除的对象,要删除的属性)
  1. Reflect.has
    作用与in 操作符相同。判断当前对象中有无这个属性值,如果对象属性中没有会向上查找到原型属性,有返回true,没有返回false
  1. let obj={
    name:"mayu",
    a:1,
    b:2,
    get:()=>{

    }
    }
    let arr=[1,2,3]
    let bool=Reflect.has(obj,"toLocaleString")
    let bools=Reflect.has(obj,"get")
    console.log(bool,bools) //true,true
  1. Reflect.set
    为对象设置属性Reflect.set(设置的对象,设置的对象属性名,设置的对象属性值)设置成功返回true,反之false
  1. let obj={
    name:"mayu",
    a:1,
    b:2,
    get:()=>{

    }
    }
    let arr=[1,2,3]
    Reflect.set(obj,"age",18)
    console.log(obj.age) //18
    也可以为数组设置某个索引值
    Reflect.set(arr,1,"1")
    console.log(arr) // "1"


Reflect个人记录的更多相关文章

  1. 用树状数组求逆序对数(poj2299)

    Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 46995   Accepted: 17168 ...

  2. MySQL启动过程详解二:核心模块启动 init_server_components()

    mysqld_main() 函数中,init_server_components() 函数负责MySQL核心模块的启动,包括mdl系统,Innodb存储引擎的启动等等: 1. mdl子系统初始化. 2 ...

  3. Appfuse:记录操作日志

    appfuse的数据维护操作都发生在***form页面,与之对应的是***FormController,在Controller中处理数据的操作是onSubmit方法,既然所有的操作都通过onSubmi ...

  4. 12,13 Proxy和Reflect

    Proxy和Reflect Proxy(代理) Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种"元编程"(meta programming),即对编程 ...

  5. Spring AOP实例——异常处理和记录程序执行时间

    实例简介: 这个实例主要用于在一个系统的所有方法执行过程中出线异常时,把异常信息都记录下来,另外记录每个方法的执行时间. 用两个业务逻辑来说明上述功能,这两个业务逻辑首先使用Spring AOP的自动 ...

  6. Spring aop 记录操作日志 Aspect

    前几天做系统日志记录的功能,一个操作调一次记录方法,每次还得去收集参数等等,太尼玛烦了.在程序员的世界里,当你的一个功能重复出现多次,就应该想想肯定有更简单的实现方法.于是果断搜索各种资料,终于搞定了 ...

  7. 报错记录:getOutputStream() has already been called for this response

    仅作记录:参考文章:http://www.blogjava.net/vickzhu/archive/2008/11/03/238337.html 报错信息: java.lang.IllegalStat ...

  8. 记一次创建LVM的日志记录

    先上一张鸟哥LVM的图.感觉这张最清楚了. #以下以Xshell的日志记录系统直接记录.上面添加了一些个人理解的注释 [BEGIN] 2016/9/13 9:22:24 #先查看下硬盘的情况. [ro ...

  9. 记录maven java.lang.String cannot be cast to XX error

    在项目开发中自定义了一个maven plugin,在本地能够很好的工作,但是在ci server上却无法正常工作报错为: --------------------------------------- ...

随机推荐

  1. linux中KVM桥接网卡br0

    在centos虚拟化当中需要增加一个桥接网卡,然后将虚拟化当中的机器的网卡桥接到桥接网卡,下面将描述设置方法: 查看现有网卡 [root@zb ~]# vim /etc/sysconfig/netwo ...

  2. Java(三)常用类

    @ 目录 Java常用类 一.字符串相关的类 1.String类 2.StringBuffer类 3.StringBuilder类 二.JDK8以前的日期时间API 1.java.lang.Syste ...

  3. 关于重写equals同时重写hashcode

    1.Object中equals方法和hashcode public boolean equals(Object obj) { return (this == obj); } public native ...

  4. 想换4K显示器了?那你搞懂啥是4K了吗?

    前言 我们在科技资讯以及电脑显示器.数字电视等电子产品的宣传语中,经常能够看见4K的字样.最近,B站(哔哩哔哩)升级了HTML5播放器和视频云等相关服务,为广大用户提供了超高清(UHD: Ultra ...

  5. .NET 开源工作流: Slickflow流程引擎高级开发(八) -- 审批网关(ApprovalOrSplit)模式的应用

    前言:业务流程流转过程中,审批类型的节点是比较常见的,在审批操作中,常见的操作就是就是主管人员对待办事项进行同意或者拒绝.所以网关处理节点,就是需要对这两种审批结果进行预备处理,审批网关是在或分支(O ...

  6. 环境安装和pycharm中一些基本设置

    一.Pycharm的使用和Python环境 1.python和pycharm的安装 python推荐版本3.7/3.8 pycharm选择社区版本 查看python版本在cmd中输入"pyt ...

  7. BT下载器Folx中删除任务与删除文件的功能区别

    当用户使用Folx完成了任务下载后,该任务仍会保留在下载列表中,并标注"已结束"的标记.随着使用时间的增长,Folx下载列表中会包含过多的"已结束"任务,用户需 ...

  8. 「LOJ 538」「LibreOJ NOIP Round #1」数列递推

    description sosusosu 虐爆 OI 之后成为了一名文化课选手.一天,他做作业碰到了一堆数列问题,每道题给出的数列都是以下形式: 给定一个下标从\(0\)开始,无限长的整数列\({a_ ...

  9. vim进入粘贴模式

    最近使用linux的vim编辑器编写程序时,遇到一些繁琐的模板想要复制粘贴进去,直接进入插入模式点复制,复制出来的格式不对没办法运行 解决办法: 这是因为 Vim 自动缩进了,按照如下设置可以解决该问 ...

  10. jmeter接口测试多数据组合登陆场景

    一.安装好Java运行环境 百度下载JDK并且配置JAVA环境的教程一搜一大把,这里我就不详说了 二.运行JMETER 打开安装目录的bin文件中的jmeter.bat文件 三.添加程序 1.添加线程 ...