窗口对象通过对象类型测试,但 hasOwnProperty 导致错误
Window object passes typeof object test, but hasOwnProperty causes error
我正在尝试检查在弹出窗口中加载文档/javascript 之前弹出窗口 ( opened_window = window.open()
) 是否已关闭,因为如果 javascript 尚未加载,那么我无法处理子窗口中的 onunload
事件以与父窗口通信并让它知道弹出窗口已关闭。
当我在文档加载之前关闭弹出窗口并从父窗口执行console.log(opened_window)
时,它显示opened_window
是一个对象,并包含设置为 true
的属性closed
,以及opener
null
。
所以,我这样做了:
if (opened_window !== null && typeof opened_window === 'object')
{
if (opened_window.hasOwnProperty('closed') &&
opened_window.closed === true &&
opened_window.hasOwnProperty('opener') &&
opened_window.opener === null)
{
opened_window = null;
// do stuff
}
}
问题是我收到错误Uncaught TypeError: undocked_window.hasOwnProperty is not a function
.这让我非常困惑,因为它已经通过了typeof opened_window === 'object'
测试,这意味着opened_window
是一个对象,那么为什么.hasOwnProperty
会导致错误呢?我的理解是,.hasOwnProperty
将适用于任何对象。
这很奇怪,但并非所有对象都继承自Object.prototype
。
例如:
Object.create(null).hasOwnProperty('foo'); // error
但你可以借用这种方法:
Object.prototype.hasOwnProperty.call(Object.create(null), 'foo'); // false
相关文章:
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何使用json将对象列表从java转换为javascript
- 序列化数据属性中对象的最可靠方法
- 如何访问声音管理器2创建的声音对象
- FabricJs-限制主对象内添加对象的移动区域
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 值对象在某个变量发生更改后发生更改
- 如何为json对象中的段发送array[]
- Chrome开发工具(如何知道我在调用哪个javascript对象)