gpt4 book ai didi

javascript - 检测是否从代理或目标调用代理 getter

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

我使用 JavaScript 的 Proxy 对象创建一个 get() 处理程序来捕获对类实例的属性访问。

我希望有不同的行为,具体取决于代理是由类内的方法调用还是由代理本身调用。

这可能吗?

编辑:一些示例代码希望能够解释我想要做什么:

class Something {
constructor() {
this.prop1 = 'val1';
this.prop2 = 'val2';
}

getProp() {
return this.prop1;
}
}

const instance = new Something();

const proxiedObject = new Proxy(instance, {
get: function(target, property, receiver) {
if (WHATEVER_IS_ACCESSING_THIS_IS_NOT_AN_INSTANCE_METHOD) {
return false;
}
else {
return target[property];
}
}
});

console.log(proxiedInstance.getProp()); // 'val1'
console.log(proxiedInstance.prop1); // 'false'

最佳答案

我想最简单的解决方案是在代理上访问时绑定(bind)所有方法,这样对this的任何访问都不会通过代理:

const proxiedObject = new Proxy(instance, {
get: function(target, property, receiver) {
const val = target[property];
if (typeof val == "function") // you need this anyway for `proxiedObject.getProp()`
return val.bind(target);
else
return false;
}
});

当然,还有很多其他方法可以包装 getProp 方法(或任何其他方法),以便在执行期间代理对于属性访问变得透明。

关于javascript - 检测是否从代理或目标调用代理 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43858689/

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