【问题标题】:Why does bind fix "failed to execute 'fetch' on 'Window' illegal invocation" error?为什么绑定修复“无法在'Window'非法调用时执行'fetch'”错误?
【发布时间】:2021-12-20 21:39:49
【问题描述】:

我只是好奇,

这...

let s = { f: window.fetch };
s.f("https://www.google.com");

失败

在“窗口”上执行“获取”失败:非法调用

虽然这行得通...

let s = { f: window.fetch.bind(window) }; 
s.f("https://www.google.com");

后者如何解决问题?为什么它会这样工作有什么理论吗?

【问题讨论】:

    标签: javascript fetch-api function-binding


    【解决方案1】:

    对于某些内部用途,fetch 函数必须使 thiswindow 相同。当您创建自己的对象并将 fetch 函数分配为其属性之一时,fetch 函数无法以 this 访问 window 对象。

    fetch specification 描述了window 可能用于的事情。您可能可以通过设置no-window 使您的原始代码工作,但我还没有测试过。

    【讨论】:

    • 这是否记录在 ECMA 规范中?
    • @jeffbRTC fetch() 不是 ES 的一部分。 It's a web spec
    • @VLAZ 抱歉,我在您链接的网络规范中哪里可以找到它?
    • @jeffbRTC 整个规范只是关于fetch()。我不确定它在哪里会说需要window(或者如果它甚至需要)。
    • @jeffbRTC "internal" 可能取决于实现。但我并没有提出这样的主张。我没有通过规范来确认或否认这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-06
    • 2019-01-07
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多