假设我有一个函数Foo,我希望从它构造的对象具有一个bar属性:
function Foo() {}
Foo.prototype.bar = 'baz'
console.log('new Foo().bar: ' + new Foo().bar)
Run Code Online (Sandbox Code Playgroud)
new Foo().bar: baz
Run Code Online (Sandbox Code Playgroud)
现在假设我以某种方式绑定 Foo.绑定函数仍可用于构造函数调用,并this忽略边界:
const Bound = Foo.bind(42)
console.log('new Bound().bar: ' + new Bound().bar)
Run Code Online (Sandbox Code Playgroud)
new Bound().bar: baz
Run Code Online (Sandbox Code Playgroud)
代理应该是一般的和透明的.然而...
const PFoo = new Proxy(Foo, { })
console.log('new PFoo().bar: ' + new PFoo().bar)
const PBound = new Proxy(Bound, { })
console.log('new PBound().bar: ' + new PBound().bar)
Run Code Online (Sandbox Code Playgroud)
new PFoo().bar: baz
new PBound().bar: undefined
Run Code Online (Sandbox Code Playgroud)
我希望第二个代理的行为完全如此Bound,因为我使用的是空处理程序.换句话说,我希望最后的输出是baz.
为什么不是这样?
(完整的片段如下) …