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

  • 相关阅读:
    集合的笼统介绍之Collection
    集合的笼统介绍之ArrayList
    final关键字+static关键字+匿名对象
    多态
    练习018:搜索插入位置
    练习017:实现strStr()
    练习016:移除元素
    练习015:删除排序数组中的重复项
    练习014:合并两个有序链表
    用JS实现链表
  • 原文地址:https://www.cnblogs.com/jinbang/p/10931920.html
Copyright © 2011-2022 走看看