javascript-在实例化对象时使用代理陷阱

javascript-在实例化对象时使用代理陷阱,javascript,Javascript,我希望有一个javascript函数,我可以实例化它,并捕获调用它的每个未定义的方法(代理陷阱) 到目前为止,我得到的是: var MyProxyFunction = new Proxy(function () { console.log(">>>>>>>>>>>>>>>>>>>> constructor"); }, { get: functio

我希望有一个javascript函数,我可以实例化它,并捕获调用它的每个未定义的方法(代理陷阱)

到目前为止,我得到的是:

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实例')谢谢。但事实上我确实需要额外的新的。因为我需要的是能够创建相同函数的几个不同实例。谢谢。但事实上我确实需要额外的新的。因为我需要的是能够为同一个函数创建几个不同的实例。