gpt4 book ai didi

javascript - 每当读取对象的属性时如何调用函数?

转载 作者:行者123 更新时间:2023-11-29 10:05:16 27 4
gpt4 key购买 nike

我们可以使用这种模式在从对象读取属性时创建钩子(Hook):

const obj = {};

Object.defineProperty(obj, 'x', {
get: function () {
return require('x');
}
});

我想知道是否有一种方法可以在读取对象(如 obj)的任何和所有 属性时创建一个钩子(Hook)?

例如,当代码尝试访问 obj 上尚不存在的属性“y”时, Hook 仍将被调用。

这是关键部分:如果我提前知道对象的所有属性,我就可以遍历它们。但在这种情况下,稍后可能会向对象添加属性,或者可能会读取未预料到的属性(最终用户会调用一些意外的东西。)

最佳答案

我认为您正在寻找 Proxy这是 ECMAScript 2015 的一项新功能,允许您为某些内部方法定义自定义行为,例如获取属性。实现 handler.get trap 允许在访问属性时调用特定函数:

const obj = {};
const proxyObj = new Proxy(obj, {
get(target, property, receiver) {
console.log('accessed');
}
});
proxyObj.foobar; //A property is accessed and the console is logged to

在这里,访问 proxyObj 的任何属性都会在控制台中产生一个日志。所有“陷阱”在这里的意思是属性值的获取被拦截,或者被困住,然后你可以在它发生时调用自定义行为。这里的target是目标对象(obj),property是被访问的属性,receiver是代理。要在此处应用它,请检查 property 是否为 y:

if(property === 'y') {
...
}

不管该属性是否存在,陷阱仍然会被调用。您可以设置各种其他陷阱,例如设置属性、使用 in 运算符、使用 delete 运算符等。您可以在 MDN 查看所有这些陷阱。 .

关于javascript - 每当读取对象的属性时如何调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44691071/

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