IE8.为什么类型在子窗口中的行为不同
IE8. Why typeof behaves different in child windows?
我在理解IE8中typeof的机制时遇到了问题。
我在"parent.html"中有以下JavaScript代码:
var myNewWindow = window.open('child.html');
myNewWindow.sayhi = function() {
alert('Hi!');
}
在父级中.html我们打开一个JavaScript控制台(F12)。我们测试类型并看起来正确。
typeof myNewWindow.sayhi "function"
但是,如果我打开控制台并在子窗口中进行一些测试,结果会有些奇怪。
typeof this.sayhi "object"
问题是可以调用"对象"。this.sayhi() 显示警报。
甚至下划线JS也会感到困惑
_.isFunction(this.sayhi) false
有人可以解释为什么一个存在于窗口(this)但在外窗口中声明的函数不被IE8识别为函数而是被识别为对象吗?
顺便说一句,有人说我应该看看答案:类型of window.close对于IE是不同的
你猜怎么着?它仍然说这个东西是一个对象:
Object.prototype.toString.call(this.sayhi) '[object Object]'
这
似乎是由于typeof
内部检查正在测试的项目是否继承自当前窗口的Function
对象。由于该函数是在另一个窗口中创建的,并且继承自不同的Function
对象,因此检查失败。
为了证明这一点,在子窗口类型的控制台中:
this.sayhi instanceof Function
>你应该得到false
this.sayhi instanceof window.opener.Function
>你应该得到true
相关文章
附带说明一下,您应该在所有本机类型(Function
、Array
等)中看到相同的问题。
相关文章:
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- 为什么不显示警报窗口
- 为什么不'我的窗口滚动事件根本没有启动.其他答案没有解决问题
- 为什么我在以编程方式打开窗口时遇到问题
- 为什么当我尝试将函数绑定到自身时,“this”对象仍然引用窗口
- 为什么我的firefox扩展javascript不能访问opener窗口,也看不到window.name
- 为什么这个JS确认窗口没有在表单提交时启动
- 为什么jQuery可以从内部调用窗口,却要将窗口发送给自己
- 为什么我的html弹出窗口显示我的函数的文本,而不是运行它们
- 为什么我的URL在JavaScript中被调用为弹出窗口
- 为什么Javascript中的跨框架或窗口数组如此难以识别
- 如果在外部单击,则隐藏弹出窗口.为什么我的脚本没有'不起作用
- 为什么根据括号的位置来引用窗口或对象?并返回undefined
- 为什么我需要让我的电子窗口比我的画布大
- 多个弹出窗口,但只有一个有效..为什么?
- 为什么有时浏览器阻止弹出窗口,有时不
- 为什么简单的 JQuery 对话框/弹出窗口不起作用
- 为什么“this”在这个TypeScript片段中指的是“窗口”
- 为什么全局作用域中的变量被分配给窗口对象
- Javascript:为什么选项卡正在刷新,为什么不弹出浏览器窗口?为什么弹出的浏览器窗口没有刷新