ES2015之Reflect

302 阅读2分钟

这是我参与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方法为对象添加一个新的属性:它有三个参数(改变对象,属性名,属性值),返回添加状态:truefalse

此时message发生了改下,如下:

{ name: '也笑', enName: 'slifree', log: [Function: log], eyes: 'black' }

注意事项

Reflect不是一个函数对象,因此它是不可构造的,也就是说我们不能new一个Reflect对象。

Reflect目前有13个方法,上述只介绍了项目中常用的三个,如果你想了解更多,可以传送到:Reflect

总结

在项目中,往往同一个功能可以有多种处理办法,如果对兼容性没有要求,可以用一些新的语法,让自己积累的更多。

如果你想了解ES的其他特性,请移步到 ES2015+碎片化学习,每天都在向前走一步,这是所有文章的目录入口。