共计 1115 个字符,预计需要花费 3 分钟才能阅读完成。
贫困大赛形象代言人
2023-09-26 15:16:20
浏览数 (1655)
ES6 中 Reflect 的作用
-
将对象的一些明显属于语言内部的方法放到 Reflect 对象上, 改进了 Object 对象的 API 设计。比如 Object.defineProperty 被移到了 Reflect.defineProperty。
- 让 Object 操作都变成函数行为。某些 Object 操作是命令式的, 比如 name in obj 和 delete obj[name], 而 Reflect 对象上的方法都是函数行为, 比如 Reflect.has(obj, name)和 Reflect.deleteProperty(obj, name)。这让 Object 操作都变得具备函数行为。
- 修改某些 Object 操作的返回结果, 让其变得更合理。比如 Object.defineProperty 在无法定义属性时会抛出错误, 而 Reflect.defineProperty 会返回 false。
- 让 Object 操作都变成函数行为后, 可以更改对象的行为, 通过修改 Reflect 对象的方法来达到修改对象操作行为的目的。这就是用 Reflect 实现元编程 (meta programming) 的一种方式。
- 提供一种机制来判断默认操作是否成功。某些默认操作的返回值含义不清晰, 例如 in 运算符的返回值只有 true/false 两种, 不够清晰。Reflect 对象的方法在失败时会抛出异常, 这比一个简单的 true/false 要清晰的多。
例如:
1. 将 Object 操作变成函数行为
// 非函数行为的写法
'foo' in myObject
// 函数行为写法
Reflect.has(myObject, 'foo')
2. 修改返回值变得更合理
// Object.defineProperty 会抛出错误
Object.defineProperty(myObject, 'foo', {value: 1})
// Reflect.defineProperty 会返回 bool 值
Reflect.defineProperty(myObject, 'foo', {value: 1})
3. 用函数行为改变默认行为
// 默认行为
delete myObject.foo;
// 改变默认行为
Reflect.deleteProperty(myObject, 'foo')
4. 判断默认操作是否成功
// 默认操作返回 bool 值
'foo' in myObject
// Reflect 会抛出错误
Reflect.has(myObject, 'foo')
如果你想了解更多关于 Reflect 反射的知识,这里有最通俗易懂的教程《ES6 Reflect》。
原文地址: JavaScript 中 Reflect 的作用是什么?
正文完