解决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的值,没有引用原来地址了,所以推荐使用第一种方法