检测是否正在从 Proxy 或目标调用 Proxy getter
Detect whether a Proxy getter is being called from the Proxy or the target
我正在使用 JavaScript 的 Proxy
对象创建一个 get()
处理程序来捕获 属性 对 class 实例的访问。
我希望有不同的行为,具体取决于代理是由 class 中的方法调用还是由代理本身调用。
这可能吗?
编辑:一些示例代码有望解释我正在尝试做的事情:
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 的 Proxy
对象创建一个 get()
处理程序来捕获 属性 对 class 实例的访问。
我希望有不同的行为,具体取决于代理是由 class 中的方法调用还是由代理本身调用。
这可能吗?
编辑:一些示例代码有望解释我正在尝试做的事情:
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
方法(或任何其他方法),以便在执行期间代理对 属性 访问变得透明。