javascript – ES6 Reflect API的优点

前端之家收集整理的这篇文章主要介绍了javascript – ES6 Reflect API的优点前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在努力升级一些代码以使用ES6语法.我有以下代码行:

删除this._foo;

我的linter提出了使用建议:

Reflect.deleteProperty(this,’_ foo’);

您可以找到此方法here的文档.

MDN文档指出:

The Reflect.deleteProperty method allows you to delete a property on
an object. It returns a Boolean indicating whether or not the property
was successfully deleted. It is almost identical to the non-strict
delete operator.

我知道delete关键字不会返回一个表示成功的值,但它更简洁.

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

我觉得Reflect API的很多用例都是用于解决异常情况和/或提供更好的条件流,但代价是更冗长的语句.我想知道如果我没有遇到任何与当前用法有关的问题,使用Reflect API是否有任何好处.

解决方法

Reflect API暴露了常见JavaScript习语背后的抽象操作.它主要用于提供合理的方法来转发在代理陷阱上调用的操作.所有Reflect方法都匹配具有相同名称的代理陷阱的签名,因此您可以使用新的Proxy(目标,Reflect)来创建与目标对象具有相同行为的对象 – 所有内容都将被转发,包括特殊的JavaScript怪癖.

这对于吸气剂和原型来说尤其重要,如third argument of many methods is “receiver”

The value of this provided for the call to target if a getter is encountered.

考虑以下代码

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,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);

当您编写代理时,您希望它完全覆盖目标对象 – 并且没有Reflect就没有惯用的方法来执行此操作.

此外,将操作符作为函数可以方便地进行功能样式编程.

原文链接:https://www.f2er.com/js/150848.html

猜你在找的JavaScript相关文章