解决window.opener.obj instanceof Object会输出false的问题

在a.html页面中:

window.obj = {name: "jinbang"}

 

在a.html页面中打开新窗口b.html页面:

console.log(window.opener.obj instanceof Object); //输出false

 

发现b.html的window.opener.obj instanceof Object会输出false,这不是应该输出true吗。

 

分析原因:

这和引用数据类型的this指向的堆内存对象有关,因为两个是不一样的堆内存对象里面。

window.opener.obj的this是指向window.opener.Object,而Object本来就是window.Object,两个不一样的堆内存对象,所以直接输出false。

 

1. 应该这样写,即可返回true:

console.log(window.opener.obj instanceof window.opener.Object); //输出true

  

2. 也可以使用深拷贝的方法:

var newObj = {};
Object.defineProperties(newObj,Object.getOwnPropertyDescriptors(window.opener.obj)); // ES8的方法
// Object.assign(newObj, window.opener.obj); // ES6的方法
console.log(newObj instanceof Object); // true

但是它实现了深拷贝,已经不是原来的对象了,修改newObj的值并不会同步修改obj的值,没有引用原来地址了,所以推荐使用第一种方法

 

posted @ 2019-05-27 17:28  chenjinbang  阅读(354)  评论(0编辑  收藏  举报