我一直在努力升级一些代码以使用 ES6 语法。我有以下代码行:
delete this._foo;
我的 linter 提出了使用建议:
Reflect.deleteProperty(this, '_foo');
您可以找到该方法的文档here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty.
MDN 文档指出:
Reflect.deleteProperty 方法允许您删除属性
一个东西。它返回一个布尔值,指示该属性是否
已成功删除。与非严格的几乎相同
删除运算符。
据我了解,delete
关键字不会返回指示成功的值,但它要简洁得多。
如果我不依赖于成功/失败delete
有什么理由支持Reflect.deleteProperty
?这意味着什么delete
是非严格的吗?
我觉得有很多用例Reflect
API 用于解决异常情况和/或提供更好的条件流程,但代价是语句更加冗长。我想知道使用它是否有任何好处Reflect
API(如果我当前的使用没有遇到任何问题)。
Reflect
API 公开了常见 JavaScript 习惯用法背后的抽象操作。它的主要用途是提供合理的方式来转发所调用的操作Proxy
traps。所有的Reflect
方法匹配具有相同名称的代理陷阱的签名,因此您可以使用new Proxy(target, Reflect)
创建具有相同行为的对象target
object - 所有内容都将被转发,包括特殊的 JavaScript 怪癖。
这对于吸气剂和原型尤其重要,因为许多方法的第三个参数是“接收者” https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get
的价值this
如果遇到 getter,则提供对目标的调用。
考虑以下代码:
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
.
此外,将运算符作为函数对于函数式编程来说很方便。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)