我想了解为什么无法使用 ES6 创建“通用”转发代理。“通用”是指代理目标可以是具有相同代理声明(构造函数 + 处理程序)的任何类型的非原始值(包括函数)。
情况1:
var o = function myCtor() {}
var p = new Proxy({}, {
construct: function(target, ...args) {
return Reflect.construct(o, ...args);
}
});
console.log(new p); // TypeError: p2 is not a constructor
案例2:
var o = {}
var p = new Proxy(function() {}, {
ownKeys: function(target) {
return Reflect.ownKeys(o);
}
});
console.log(Object.keys(p)); // TypeError: 'ownKeys' on proxy: trap result did not include 'arguments'
当我使用 function(){} 作为代理目标(而不是 {})时,案例 1 可以正常工作,但是案例 2 不再有效。
谢谢你的帮助。