gpt4 book ai didi

javascript - 如何在 Javascript 中将 `get` 代理应用于 `window.location`?

转载 作者:行者123 更新时间:2023-11-30 15:04:36 25 4
gpt4 key购买 nike

我正在使用 Chrome 60。我刚刚尝试在 window.location 上应用 get Proxy

它适用于前两个引用,但是,它因 Illegal invocation 错误而失败:

location = new Proxy(location, {
get: (target, name) => {
console.log(name, target, "PROX");
return target[name];
}
});

错误信息是:

VM3495:3 Symbol(Symbol.toPrimitive) Location {…} "PROX"

VM3495:3 toString Location {…} PROX

Uncaught TypeError: Illegal invocation at :1:10

  1. 为什么会抛出错误?
  2. 如何在 Javascript 中对 window.location 应用 get 代理?

最佳答案

Why did it throw the error?

同理why proxies are incompatible with Setswith Maps : 它们是 native 对象,它们的方法(如您的示例中的 toString )期望在具有各自内部插槽的此类 native 对象上调用,而不是代理。

How do I apply get Proxy on window.location in Javascript?

您需要将 get 陷阱拦截的所有方法绑定(bind)到目标:

new Proxy(location, {
get: (target, name) => {
console.log(name, target, "PROX");
return typeof target[name] == "function"
? target[name].bind(target)
: target[name];
}
});

但是,这仍然没有改变,您不能用您自己的实现替换 window.location 全局。这是一个不可配置的属性,分配给它会导致导航不写入该属性。

关于javascript - 如何在 Javascript 中将 `get` 代理应用于 `window.location`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45965893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com