为什么下面的代码会记录 undefined for a.bar?
Why does the code below log undefined for a.bar?
我编写了下面的代码,为 proxy_a
的内部原型获取例程设置了 trap,但代码似乎没有按预期工作。
var base = {
foo: 100
}
var a = {
bar: 10
};
var proxy_a = new Proxy(a, {
getPrototypeOf: function(target) {
return base;
}
});
// make proxy_a the prototype of b
var b = Object.create(proxy_a);
console.log(b.bar);
console.log(b.foo);
这是输出结果
>> 10
>> undefined
问题出在第二条日志语句上。我希望对 b.foo
的访问解析为 base
对象的 foo
属性,但这并没有发生。
任何人都可以解释我做错了什么,最好参考 ECMAScript 规范吗?
It looks like 在没有 get 处理程序的情况下访问代理对象上的 属性 将简单地将 属性 访问委托给代理目标。和做a.foo
基本一样。这意味着 foo
是在 a
的原型 上寻找的,而不是代理对象的原型(这将触发 getPrototypeOf
)。
- Let trap be ? GetMethod(handler, "get").
- If trap is undefined, then
7.a Return ? target.[[Get]](P, Receiver).
我编写了下面的代码,为 proxy_a
的内部原型获取例程设置了 trap,但代码似乎没有按预期工作。
var base = {
foo: 100
}
var a = {
bar: 10
};
var proxy_a = new Proxy(a, {
getPrototypeOf: function(target) {
return base;
}
});
// make proxy_a the prototype of b
var b = Object.create(proxy_a);
console.log(b.bar);
console.log(b.foo);
这是输出结果
>> 10
>> undefined
问题出在第二条日志语句上。我希望对 b.foo
的访问解析为 base
对象的 foo
属性,但这并没有发生。
任何人都可以解释我做错了什么,最好参考 ECMAScript 规范吗?
It looks like 在没有 get 处理程序的情况下访问代理对象上的 属性 将简单地将 属性 访问委托给代理目标。和做a.foo
基本一样。这意味着 foo
是在 a
的原型 上寻找的,而不是代理对象的原型(这将触发 getPrototypeOf
)。
- Let trap be ? GetMethod(handler, "get").
- If trap is undefined, then
7.a Return ? target.[[Get]](P, Receiver).