Reflect反射

技术Reflect反射 Reflect反射es6提供了一个全新的api----Reflect,其将object对象一些内部的方法,放到Reflect对象上,将来可能彻底取代Object对象内部的这些方法

反射反射

Es6提供了一个全新的API——Reflect,将object对象的一些内部方法放在Reflect对象上,将来可能会完全取代Object对象的这些内部方法,方法的返回值改为true或false。

new.target

在介绍API之前,我们先来说一个属性。new.targer指向由new直接执行的构造函数。

在函数中使用

在函数中使用new.target将返回undefined,这可用于确定函数是否用作构造函数。

(函数(){ 0

console.log(new.target) //未定义

}())

在构造函数中使用

构造函数中的new.target将指向new执行的构造函数,如下所示。

甲级(

构造函数(){ 0

console . log(new . target)//[A类]

console . log(new . target . name)//A

}

}

乙类扩展了甲类

构造函数(){ 0

super()//[B类扩展了A类]

//B

}

}

API

我们来介绍一下Reflect的API。

Reflect.construct(c, args, 可选newTarget)

当传递两个参数时,类似于新的运算符,将返回一个实例对象。第一个参数是构造函数,第二个参数是参数数组。

函数x(){}

Reflect.construct(x,[]) //x {}

传递第三个参数时,前两个参数保持不变,第三个参数是一个新的构造函数,如下面的代码所示

函数的执行没有改变,this.a this.b仍然是x1中的值,但是new.target变成了x2,所以实际上第三个参数的作用是把new.target的方向改为第三个参数。

函数x1(){ 0

this.a=10

this.b=20

console.log(this.a,this.b,new.target)

}

函数x2(){ 0

这个a=100

this.b=200

console.log(this.a,this.b,new.target)

}

设o1=Reflect.construct(x1,[],x2) //10 20 [Function: x2]

Reflect.set(o, name, value, 可选receiver)

类似于o[name]=value,成功返回true,失败返回false。如果o不是对象,将引发类型错误。

如果指定了可选参数receiver,它将用作接收器中的方法调用,如以下代码所示:

让n1={

a:1

}

让n2={

a:3

}

Reflect.set(n1,' b ',10,n2)

n1 //{ a: 1 }

n2 //{ a: 3,b: 10 }

Reflect.apply(f, o, args)

相当于f.apply(o,args),让函数F作为o的方法被调用。

Reflect.defineProperty(o, name, descriptor)

反射.定义属性类似于对象.定义属性。对象.定义属性的成功将返回对象0,失败将抛出类型错误,反射.定义属性的成功将返回真,失败将返回假。

Reflect.deleteProperty(o, name)

删除属性,成功将返回真,失败将返回假,类似于执行删除o[name]

Reflect.get(o, name, 可选receiver)

与o[name]类似,如果传递get访问器的属性并指定接收者,则相当于在接收者上调用get访问器来获取属性值。

Reflect.getOwnPropertyDescriptor(o, name)

基本等于对象。getownpropertydescriptor,但反射API的第一个参数必须是对象,否则将引发TypeError。

Reflect.getPrototypeOf(o)

返回一个原型或null,并为原始值抛出一个TypeError,它基本上等于Object.getPrototypeOf(),只是Object.getPrototypeOf()将原始值包装到一个对象中。

Reflect.has(o, name)

类似于o中的name,返回true或false。

Reflect.isExtensible(o)

判断对象O是否可扩展,如果可扩展则返回true,否则返回false如果O不是对象,抛出TypeError,类似于Object.isExtensible(),但如果O不是对象,Object.isExtensible()返回false。

Reflect.ownKeys(o)

返回将返回的所有键、字符串和符号的数组。如果O不是对象,将引发TypeError,它相当于Object.getOwnPropertyNames()和Object.getOwnPropertyNames()的结果组合

Reflect.preventExtensions(o)

将对象O的扩展性设置为false并返回true。如果O不是一个对象,它将抛出类型错误。Object.preventExtensions()具有相同的效果,但是返回对象O不会引发TypeError。

Reflect.setPrototypeOf(o, p)

类似于Object.setPrototypeOf(),如果成功则返回true,如果失败则返回false。如果o不是一个对象,或者p既不是一个对象,也不是空值,它就会抛出TypeError。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/154016.html

(0)

相关推荐

  • 画蛇添足的道理是什么,画蛇添足喜欢的句段及理由

    技术画蛇添足的道理是什么,画蛇添足喜欢的句段及理由1.雨中的桃花,那么娇嫩,那么可爱,仿佛刚刚从睡梦中醒过来的小女孩,稚气地望着你画蛇添足的道理是什么;那些湿润的小花蕾,好象婴儿们的小嘴唇,红艳艳地咧开着。2.写结尾时常

    生活 2021年10月25日
  • git分支合并

    技术git分支合并 git分支合并在做开发的时候,你和你的小伙伴在同一个仓库下不同分支进行开发,最后需要把代码合并到一个分支中。比如他用的是master分支,然而你用的你自己建的一个分支new。你需要把

    礼包 2021年10月19日
  • 国5的车还能开多久,国五标准的柴油车能够使用多少年

    技术国5的车还能开多久,国五标准的柴油车能够使用多少年国五标准的柴油车依据车型不同使用年限也不同国5的车还能开多久,具体如下: 《机动车e68a8462616964757a686964616f31333431363062

    生活 2021年10月26日
  • 僵尸粉自助下单,抖音找人刷粉是什么意思?

    技术僵尸粉自助下单,抖音找人刷粉是什么意思?僵尸粉自助下单,抖音找人刷粉是什么意思?你是否经常拍抖音短视频却无法上热门,你是否辛苦专研却没有什么收获!这些都是因为你没有掌握对抖音上热门的方法,方法不对,埋头苦干只能南辕北

    测评 2021年11月11日
  • 如何用Python爬取小红书

    技术如何用Python爬取小红书如何用Python爬取小红书,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。小红书首先,我们打开之前大家配置好的charles

    攻略 2021年10月26日
  • ORC在Hive中如何应用

    技术ORC在Hive中如何应用这篇文章主要介绍了ORC在Hive中如何应用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。ORC文件不仅仅是一种列式文件存储

    攻略 2021年12月11日