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

  • 相关阅读:
    JAVA实现接口监控报警系统
    批量插入数据、自定义分页器
    django与Ajax
    ORM优化查询、choices参数
    django之查询操作及开启事务
    django之ORM字段及参数
    数据库设计
    django之模型层
    django之模板层
    django之视图层
  • 原文地址:https://www.cnblogs.com/jinbang/p/10931920.html
Copyright © 2011-2022 走看看