javascript-在实例化对象时使用代理陷阱
我希望有一个javascript函数,我可以实例化它,并捕获调用它的每个未定义的方法(代理陷阱) 到目前为止,我得到的是:javascript-在实例化对象时使用代理陷阱,javascript,Javascript,我希望有一个javascript函数,我可以实例化它,并捕获调用它的每个未定义的方法(代理陷阱) 到目前为止,我得到的是: var MyProxyFunction = new Proxy(function () { console.log(">>>>>>>>>>>>>>>>>>>> constructor"); }, { get: functio
var MyProxyFunction = new Proxy(function () {
console.log(">>>>>>>>>>>>>>>>>>>> constructor");
}, {
get: function(target, prop) {
if (target[prop] === undefined) {
return function() {
console.log('an otherwise undefined function!!');
};
}
else {
return target[prop];
}
}
});
现在,如果我调用MyProxyFunction.foo()
,它将被调用(我将看到“构造函数”启动,并看到get函数的日志)
但我想做的是将这个对象实例化(并在构造函数中进行一些初始化),如下所示:
var myObj = new MyProxyFunction();
myObj.foo();
但是当我这么做的时候,我发现
foo()
不是一个函数。为什么?当实例化代理时,如何使其工作?对该行为的解释是,构造函数是代理的,而不是它构造的对象。因此,当您编写新MyProxyFunction
时,会调用代理构造函数,但构造函数会创建一个与代理
无关的新对象,而与构造函数的原型
属性有关
有几种方法可以让它工作
1.在原型对象上应用代理
函数MyProxyFunction(){
console.log(“>>>>>>>>>>>>>>>>>构造函数”);
};
MyProxyFunction.prototype=新代理(MyProxyFunction.prototype{
获取:函数(目标、道具){
如果(目标[prop]==未定义){
返回函数(){
log('一个未定义的函数!!');
};
}
否则{
返回目标[道具];
}
}
});
var myObj=新的MyProxyFunction();
myObj.foo();
log('constructor:',myObj.constructor.name);
log('是MyProxyFunction的实例?:',MyProxyFunction的myObj实例')代码>对这种行为的解释是,构造函数是代理的,而不是它构造的对象。因此,当您编写新MyProxyFunction
时,会调用代理构造函数,但构造函数会创建一个与代理
无关的新对象,而与构造函数的原型
属性有关
有几种方法可以让它工作
1.在原型对象上应用代理
函数MyProxyFunction(){
console.log(“>>>>>>>>>>>>>>>>>构造函数”);
};
MyProxyFunction.prototype=新代理(MyProxyFunction.prototype{
获取:函数(目标、道具){
如果(目标[prop]==未定义){
返回函数(){
log('一个未定义的函数!!');
};
}
否则{
返回目标[道具];
}
}
});
var myObj=新的MyProxyFunction();
myObj.foo();
log('constructor:',myObj.constructor.name);
log('是MyProxyFunction的实例?:',MyProxyFunction的myObj实例')代码>谢谢。但事实上我确实需要额外的新的。因为我需要的是能够创建相同函数的几个不同实例。谢谢。但事实上我确实需要额外的新的。因为我需要的是能够为同一个函数创建几个不同的实例。