这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战
Reflect
ES2015的标准增加了:Reflect API
即一个内置的对象,这篇文章我们就来了解一下什么是Reflect。
Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与proxy的方法相同,可参考ES2015之代理这篇文章。
如何使用
让我们先定义一个对象,如下:
const message={
name:"也笑",
enName:'slifree',
log:()=>{
console.log('Reflect 对象');
}
}
检测对象是否存在特定属性
Reflect.has(message, 'name'); // true
Reflect.has(message, 'nametest'); // false
我们可以利用has
方法来检测一个对象是否存在特定属性,当然我们也可以直接使用对象的hasOwnProperty
方法来检测,如下:
message.hasOwnProperty('name'); // true
返回对象自身的属性
Reflect.ownKeys(message); // [ 'name', 'enName', 'log' ]
我们可以利用ownKeys
方法来获取一个对象的所有属性,当然我们也可以使用Object.keys()
来实现这个功能,如下:
Object.keys(message); // [ 'name', 'enName', 'log' ]
为对象添加一个新的属性
Reflect.set(message, 'eyes', 'black');
我们可以利用set
方法为对象添加一个新的属性:它有三个参数(改变对象,属性名,属性值)
,返回添加状态:true
或 false
。
此时message
发生了改下,如下:
{ name: '也笑', enName: 'slifree', log: [Function: log], eyes: 'black' }
注意事项
Reflect
不是一个函数对象,因此它是不可构造的,也就是说我们不能new
一个Reflect
对象。
Reflect
目前有13
个方法,上述只介绍了项目中常用的三个,如果你想了解更多,可以传送到:Reflect
总结
在项目中,往往同一个功能可以有多种处理办法,如果对兼容性没有要求,可以用一些新的语法,让自己积累的更多。
如果你想了解ES的其他特性,请移步到 ES2015+碎片化学习,每天都在向前走一步,这是所有文章的目录入口。