gpt4 book ai didi

javascript - IE8。为什么 typeof 在子窗口中表现不同?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:18:25 25 4
gpt4 key购买 nike

我在理解 IE8 中 typeof 的机制时遇到问题。

我在“parent.html”中有以下 JavaScript 代码:

var myNewWindow = window.open('child.html');
myNewWindow.sayhi = function() {
alert('Hi!');
}

在 parent.html 中,我们打开一个 JavaScript 控制台 (F12)。我们测试了类型,看起来是正确的。

typeof myNewWindow.sayhi      "function"

但是如果我打开控制台并在子窗口中进行一些测试,结果会有些奇怪。

typeof this.sayhi             "object"

问题是可以调用“对象”。 this.sayhi() 显示警报。

连 underscoreJS 都弄糊涂了

_.isFunction(this.sayhi)       false

谁能解释为什么一个函数出现在 window(this) 中但声明在外部窗口中,IE8 不将其识别为函数而是将其识别为对象?

顺便说一下,有些人说我应该在以下位置查看答案: typeof window.close is different for IE

你猜怎么着?它仍然说这个东西是一个对象:

Object.prototype.toString.call(this.sayhi)          '[object Object]'

最佳答案

这似乎是因为 typeof 在内部检查被测试的项目是否继承自当前窗口的 Function 对象。由于该函数是在另一个窗口中创建的,并且是从不同的 Function 对象继承的,因此检查失败。

为了证明这一点,在子窗口的控制台中输入:

this.sayhi instanceof Function > 你应该得到 false

this.sayhi instanceof window.opener.Function > 你应该得到 true

Related article

附带说明一下,您应该会在所有原生类型(FunctionArray 等)中看到同样的问题

关于javascript - IE8。为什么 typeof 在子窗口中表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18898626/

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