ES6 反射 Reflect

本文介绍JavaScript内置对象Reflect,提供了一套API用于访问JS底层功能,如属性读写、函数调用等,旨在减少特殊语法使用,使代码更纯净。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Reflect --> 反射

​ Reflect是什么呢? Reflect 是一个内置的js对象,它提供了一系列的方法供开发者访问一些JS底层的功能。由于它类似于其他语言的 反射 , 所以取名为 Reflect。

​ 受函数式编程的影响,在ES5 中就已经提出了一个很重要的理念 --> 减少魔法,让代码更加的纯粹。 让一个语言中的功能以方法、函数或者对象的方式, 以API 的形式存在,不再使用特殊的语法出现,这种特殊的语法就是魔法。

​ ES6 中深入贯彻了这种理念, 它认为像是 对属性内存的控制、原型链的修改、函数的调用等等这些都是属于底层实现,属于一种魔法,应该抽取出来形成API 并且高度聚合在某个对象中, 所以造就了 Reflect

​ 提供的 API:

Reflect.set()

// 设置对象 target的属性 propertyKey的值为value, 等同于给对象赋值
Reflect.set(target, propertyKey, value)

// 例如
const obj = {
    a: 1,
    b: 2
}
// 修改 a 的值
obj.a = 10
// 使用 Reflect
Reflect.set(obj, 'a', 10)

Reflect.get()

// 读取对象target的属性propertyKey, 等同于读取对象的属性值
Reflect.get(target, propertyKey)
// 10
Reflect.get(obj, 'a')

Reflect.apply()

aaa
// 调用一个指定的函数,并绑定this和参数列表。 等同于函数调用。
Reflect.apply(target, thisArgument, argumentList)
// 例如
function method (a, b) {
    console.log("method:", a, b)
}
method(3, 5) // method 3 5
Reflect.apply(method, null, [3, 5]) // method 3 5

Reflect.deleteProperty()

// 删除一个对象属性
Reflect.deleteProperty(target, propertyKey)

const obj = {
    a: 1,
    b: 2
}
// delete obj.a
// console.log(obj) // { b: 2 }
Reflect.deleteProperty(obj, a)
console.log(obj) // { b: 2 }

Reflect.defineProperty()
Object.definePropert

// 类似于 Object.defineProperty, 不同的是如果配置出现问题, 返回 false 而不是报错
Reflect.defineProperty(target, propertyKey, attributes)

Reflect.construct()

// 用构造函数的方式创建一个对象
Relect.construct(target, argumentsList)

function Test(a, b) {
    this.a = a;
    this.b = b;
}
//const test = new Test(1, 2)
const test = Reflect.construct(Test, [1, 2])

Reflect.has()

// 判断一个对象是否拥有一个属性
Reflect.has(target, propertyKey)

const obj = {
    a: 1
    b; 2
}

// console.log('a' in obj)
Reflect.has(obj, 'a') // true | type is bollean

更多 API ↑

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值