gpt4 book ai didi

javascript - 使用ES6代理来捕获Object.hasOwnProperty

转载 作者:行者123 更新时间:2023-12-03 17:58:23 29 4
gpt4 key购买 nike

我想使用ES6代理来捕获以下常见代码:

for (let key in trapped) {
if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;
let value = trapped[key];
//various code
}

但是在检查了 proxy documentation之后,我不确定该怎么做,主要是因为 has陷阱陷阱是针对 in运算符的,它似乎没有在以上代码中使用,并且对于 hasOwnProperty操作也没有陷阱。

最佳答案

您可以使用 getOwnPropertyDescriptor handler捕获hasOwnProperty()调用。

例:

const p = new Proxy({}, {
getOwnPropertyDescriptor(target, property) {
if (property === 'a') {
return {configurable: true, enumerable: true};
}
}
});

const hasOwn = Object.prototype.hasOwnProperty;

console.log(hasOwn.call(p, 'a'));
console.log(hasOwn.call(p, 'b'));


这是 指定的行为,而不是特定实现的怪癖:
  • Object.prototype.hasOwnProperty 调用抽象[[HasOwnProperty]]操作
  • [[HasOwnProperty]] 调用抽象[[GetOwnProperty]]操作
  • [[GetOwnProperty]]是什么 getOwnPropertyDescriptor handles
  • 关于javascript - 使用ES6代理来捕获Object.hasOwnProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40451694/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com