PHP中__call
魔术方法的等效方法是什么?
我曾经认为代理可以做到这一点,但实际上不行。
class MyClass{
constructor(){
return new Proxy(this, {
apply: function(target, thisArg, args){
console.log('call', thisArg, args);
return 'test';
},
get: function(target, prop){
console.log('get', prop, arguments);
}
});
}
}
var inst = new MyClass();
console.log(inst.foo(123));
get
看起来是有效的,因为我看到了 "get foo",但是 apply
不行。我得到了一个 "is not a function" 的错误。
apply
陷阱用于调用对象本身,即inst(…)
。但是,您无法从非可调用目标创建可调用代理。 - Bergi.foo
属性上的get
陷阱必须返回一个函数,以便你可以调用它。 - Bergi