首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ES6反射API的好处

ES6反射API的好处
EN

Stack Overflow用户
提问于 2016-02-08 18:21:43
回答 1查看 3.6K关注 0票数 16

我一直在努力升级一些代码以使用ES6语法。我有以下代码:

代码语言:javascript
复制
delete this._foo;

我的林特提出了一个建议:

代码语言:javascript
复制
Reflect.deleteProperty(this, '_foo');

您可以找到此方法这里的文档。

MDN文档状态:

Reflect.deleteProperty方法允许您删除对象上的属性。它返回一个布尔值,指示该属性是否已成功删除。它几乎与非严格删除操作符相同。

我知道delete关键字不会返回一个表示成功的值,但它不那么冗长。

如果我不依赖于delete的成功/失败,有什么理由支持Reflect.deleteProperty吗?delete是不严格的是什么意思?

我觉得很多用于Reflect API的用例都是为了解决特殊情况和/或提供更好的条件流,但代价是语句要冗长得多。我想知道,如果我目前的使用没有遇到任何问题,那么使用Reflect API是否有什么好处。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-17 18:19:02

Reflect API公开了保留在常见的JavaScript习语后面的抽象操作。它的主要用途是提供合理的方法来转发调用Proxy 的操作。所有Reflect方法都匹配具有相同名称的代理陷阱的签名,因此您可以使用new Proxy(target, Reflect)创建行为与target对象相同的对象--所有内容都将被转发,包括特殊的JavaScript怪癖。

它对于getter和原型特别重要,如许多方法的第三个论点是“接收者”。

如果遇到getter,则为目标调用提供this的值。

考虑以下代码:

代码语言:javascript
复制
var target = {
    get foo() {
        return this.bar;
    },
    bar: 3
};
var handler = {
    get(target, propertyKey, receiver) {
        if (propertyKey === 'bar') return 2;

        console.log(Reflect.get(target, propertyKey, receiver)); // this in foo getter references Proxy instance; logs 2
        console.log(target[propertyKey]); // this in foo getter references "target" - logs 3
    }
};
var obj = new Proxy(target, handler);

当您编写Proxy时,您希望它能够完全覆盖目标对象--没有Reflect,就没有一种惯用的方法来做到这一点。

此外,以运算符为函数也方便了函数式编程。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35276559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档