【发布时间】:2021-10-02 11:54:25
【问题描述】:
我编写了下面的代码来为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 的访问能够解析为base 对象的foo 属性,但这不会发生。
谁能解释我做错了什么,最好参考 ECMAScript 规范?
【问题讨论】:
-
您编写的代码类似于 Proxy 中的
get方法,但不适用于getPrototypeOf。陷阱需要被触发,MDN 说有五种方法可以做到这一点。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… -
(这很容易通过在
getPrototypeOf函数中添加console.log来演示——它不会在sn-p 的流程中执行。) -
是的,我最近看到并阅读了一些 ECMAScript 的文档。现在的问题是我如何在 JavaScript 中真正实现这种想法?
-
我相信你必须实现一个 GET 陷阱来实现这种行为(即委托给其他对象)。
-
@FelixKling 是的,我已经在尝试过了,它奏效了。我只是想知道,在性能方面可以吗?您能否对使用
Proxy的性能方面有所了解?
标签: javascript ecmascript-6 es6-proxy