Reflect个人记录
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) //1Reflect.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个人记录的更多相关文章
- 用树状数组求逆序对数(poj2299)
Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 46995 Accepted: 17168 ...
- MySQL启动过程详解二:核心模块启动 init_server_components()
mysqld_main() 函数中,init_server_components() 函数负责MySQL核心模块的启动,包括mdl系统,Innodb存储引擎的启动等等: 1. mdl子系统初始化. 2 ...
- Appfuse:记录操作日志
appfuse的数据维护操作都发生在***form页面,与之对应的是***FormController,在Controller中处理数据的操作是onSubmit方法,既然所有的操作都通过onSubmi ...
- 12,13 Proxy和Reflect
Proxy和Reflect Proxy(代理) Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种"元编程"(meta programming),即对编程 ...
- Spring AOP实例——异常处理和记录程序执行时间
实例简介: 这个实例主要用于在一个系统的所有方法执行过程中出线异常时,把异常信息都记录下来,另外记录每个方法的执行时间. 用两个业务逻辑来说明上述功能,这两个业务逻辑首先使用Spring AOP的自动 ...
- Spring aop 记录操作日志 Aspect
前几天做系统日志记录的功能,一个操作调一次记录方法,每次还得去收集参数等等,太尼玛烦了.在程序员的世界里,当你的一个功能重复出现多次,就应该想想肯定有更简单的实现方法.于是果断搜索各种资料,终于搞定了 ...
- 报错记录:getOutputStream() has already been called for this response
仅作记录:参考文章:http://www.blogjava.net/vickzhu/archive/2008/11/03/238337.html 报错信息: java.lang.IllegalStat ...
- 记一次创建LVM的日志记录
先上一张鸟哥LVM的图.感觉这张最清楚了. #以下以Xshell的日志记录系统直接记录.上面添加了一些个人理解的注释 [BEGIN] 2016/9/13 9:22:24 #先查看下硬盘的情况. [ro ...
- 记录maven java.lang.String cannot be cast to XX error
在项目开发中自定义了一个maven plugin,在本地能够很好的工作,但是在ci server上却无法正常工作报错为: --------------------------------------- ...
随机推荐
- 在Service中创建全局Dialog对话框
需要使用到悬浮窗权限 val builder: AlertDialog.Builder = AlertDialog.Builder(this)builder.setMessage("from ...
- unity 顶点弹性网格效果
1.球衰减 首先,我们将处理球衰减,鼠标或手指点中网格的点是碰撞点,越往外它所受的影响越小.我们需要从CPU中获取"_ImpactPos"这个碰撞点,获取摄像机和碰撞点的矢量,我们 ...
- Java基础—Java方法的调用
Java方法的调用个主要有以下几种: 1.调用非静态方法 2.调用静态方法 3.方法与方法之间的调用 (1).静态方法内部调用其他方法 (2).非静态方法内部调用 1.调用非静态方法: 非静态方法的调 ...
- css3系列之详解border-image
border-image border-image呢,是给 边框加上背景图片的.没错,就是平常那一小小条的边框,也能加图片. 参数: border-image-source border-image ...
- Comparator比较器
Comparator比较器 简介 为什么写? comparator 是javase中的接口,位于java.util包下,该接口抽象度极高,有必要掌握该接口的使用 大多数文章告诉大家comparator ...
- MySQL常用命令与语句
目录 Shell命令 查看系统信息 查看系统变量 设置系统变量 数据库操作 查看表信息 修改表语句 操作表 操作索引 操作约束 操作列 查询常用语句 Shell命令 mysql -uroot -p12 ...
- AFNetWorking 丢失数据
问题描述: 使用AFNetWorking请求数据,请求成功,但是拿不到所需要的数据,但是使用其他平台都可以拿到数据. 原因分析: AFNetWorking无法解析. 解决方式: AFJSONRespo ...
- 方格取数(number) 题解(dp)
题目链接 题目大意 给你n*m个方格,每个格子有对应的值 你从(1,1)出发到(n,m)每次只能往下往上往右,走过的点则不能走 求一条路线使得走过的路径的权值和最大 题目思路 如果只是简单的往下和往右 ...
- 【2020.11.30提高组模拟】剪辣椒(chilli)
剪辣椒(chilli) 题目描述 在花园里劳累了一上午之后,你决定用自己种的干辣椒奖励自己. 你有n个辣椒,这些辣椒用n-1条绳子连接在一起,任意两个辣椒通过用若干个绳子相连,即形成一棵树. 你决定分 ...
- PyQt(Python+Qt)学习随笔:QMainWindow的addDockWidget方法增加QDockWidget停靠窗到主窗口
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 DockWidget除了放在QMainWindow窗口内外,也可以放在 ...