微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么下面的代码为 a.bar 记录未定义?

如何解决为什么下面的代码为 a.bar 记录未定义?

我编写了下面的代码来为 proxy_a 的内部原型获取例程设置一个陷阱,但代码似乎没有按预期工作。

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 的访问可以解析为 foo 对象的 base 属性,但这并没有发生。

谁能解释我做错了什么,最好参考 ECMAScript 规范?

解决方法

It looks like 在没有获取处理程序的情况下访问代理对象上的属性将简单地将属性访问委托给代理目标。它与执行 a.foo 基本相同。这意味着在 foo 的原型上查找 a,而不是代理对象的原型(这会触发 getPrototypeOf)。

  1. trap 成为? GetMethod(handler,"get").
  2. 如果trap未定义,则
    7.a 返回 ? 目标.[[Get]](P,接收者).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。