Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中的“window.location”上应用“get”代理?_Javascript - Fatal编程技术网

如何在Javascript中的“window.location”上应用“get”代理?

如何在Javascript中的“window.location”上应用“get”代理?,javascript,Javascript,我用的是Chrome60。我刚刚尝试在窗口上应用获取代理。位置 但是,它在前两个引用中起作用,然后失败,出现非法调用错误: location = new Proxy(location, { get: (target, name) => { console.log(name, target, "PROX"); return target[name]; } }); 错误消息为: VM3495:3符号(Symbol.toPri

我用的是Chrome60。我刚刚尝试在
窗口上应用
获取
代理。位置

但是,它在前两个引用中起作用,然后失败,出现
非法调用
错误:

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

VM3495:3符号(Symbol.toPrimitive)位置{…}“PROX”

VM3495:3 toString位置{…}PROX

未捕获的TypeError:在1:10处非法调用

  • 为什么会抛出错误
  • 如何在Javascript中的
    window.location
    上应用
    get
    代理
  • 为什么会抛出错误

    这是出于同样的原因,或者说:它们是本机对象,它们的方法(如示例中的
    toString
    )希望通过相应的内部插槽而不是代理来调用

    如何在Javascript中的
    window.location
    上应用get代理

    您需要将
    get
    陷阱截获的所有方法绑定到目标:

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

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

    我不确定是否可以分配给
    位置。