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

Reflect.construct:

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

例:

我们先自己定义一个类

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

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

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

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

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

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

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

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

    FactoryBean接口 Spring中有两种类型的Bean:一种是普通的JavaBean:另一种就是工厂Bean(FactoryBean),这两种Bean都受Spring的IoC容器管理. Fac ...

  2. Redis订阅

    1.Redis订阅简介 进程间的一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. 2.Redis订阅命令 3.Redis订阅的使用 先订阅后发布后才能收到消息, 1 可以一次性订 ...

  3. 设置Centos7中vim与vi编辑器显示行号

    设置Centos7中vim与vi编辑器的行号 步骤一: 输入命令设置: 1.vim ~/.vimrc 或者:(vi ~/.vimrc) 步骤二: 输入命令保存: 1.在其中输入 "set n ...

  4. bWAPP----SQL Injection (GET/Search)

    SQL Injection (GET/Search) 输入单引号 报错,在%'附近出错,猜测参数被 '%  %'这种形式包裹,没有任何过滤,直接带入了数据库查询 输入order by查询列 union ...

  5. Mate 40系列发布 搭载华为运动健康服务带来健康数字生活

    10月30日,HUAWEI Mate 40系列国内发布会如期而至.Mate 40系列除了拥有强悍的性能.全能记录影像和突破性的交互之外,还搭载了全新升级的HMS Core,其中,Health Kit( ...

  6. 关于ABBYY的常见问题与解答

    问:ABBYY的版本那么多,我不知道哪款是我需要的.可不可以帮助我选择? 答:您可在此查看不同版本的功能介绍与版本对比,选择适合自己的版本即可. 查看ABBYY FineReader 15功能:查看A ...

  7. k8s 自动伸缩 pod(HPA)

    上一篇简单说了一下使用 kubeadm 安装 k8s.今天说一下 k8s 的一个神奇的功能:HPA (Horizontal Pod Autoscaler). HPA 依赖 metrics-server ...

  8. Linux中redis服务开启

    集群模式设置为no 就可以开启服务 cluster-enable no

  9. 蓝桥杯-RP大冒险-未解决

    RP大冒险 问题描述 请尽情使用各种各样的函数来测试你的RP吧~~~ 输入格式 一个数N表示测点编号. 输出格式 一个0~9的数. 样例输入 0 样例输出 X {当且仅当输出仅有一个数X且X为0~9的 ...

  10. 浅谈树链剖分 F&Q

    这是一篇迟来的博客,由于我懒得写文章,本篇以两个问题阐述笔者对树链剖分的初步理解. Q1:树链剖分解决什么问题? 树链剖分,就是把一棵树剖分成若干连续的链,将这些链里的数据映射在线性数组上维护.比方说 ...