我在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()显示警告。
即使是下划线也会感到困惑
_.isFunction(this.sayhi) false
有人可以解释为什么在窗口(this)中出现但在外部窗口中声明的函数不被识别为函数而是被IE8识别为对象吗?
顺便说一下,有人说我应该看看答案: typeof window.close is different for IE
猜猜是什么?它仍然说这个东西是一个对象:Object.prototype.toString.call(this.sayhi) '[object Object]'
答案 0 :(得分:2)
这似乎是由于typeof
在内部检查被测项目是否继承当前窗口的Function
对象。由于该函数是在另一个窗口中创建的,并且是从另一个Function
对象继承的,因此检查失败。
为了证明这一点,在子窗口的控制台中输入:
this.sayhi instanceof Function
>你应该得到false
this.sayhi instanceof window.opener.Function
>你应该得到true
在旁注中,您应该会看到所有原生类型(Function
,Array
等)的同样问题。