zoukankan      html  css  js  c++  java
  • js深复制

    一般来讲深复制主要是为了复制js对象中的引用类型,引用类型在普通的赋值操作下相当于是引用,修改复制对象也会影响原对象,简单的方法的话可以使用JSON.parse(JSON.stringify(obj)) 来实现深复制

    然而这是没有考虑对象中有函数的情况,用var b = JSON.parse(JSON.stringify(a)) 这种方法的深复制没法复制对象里面的函数,而且属性的顺序也可能会出错。

    这里记录一下用递归深复制可以复制函数的办法

            function isArray(o){
                return Object.prototype.toString.call(o)=='[object Array]';
            }
            function deepCopy(obj){
                var newObj ;
                if(isArray(obj)){
                    newObj = [] ;
                }else if(typeof obj=="object"){
                    newObj = {} ;
                }else if(typeof obj=="function"){
                    return eval(obj.toString())
                }else{
                    return obj ;
                }
                for(var key in obj){
                    newObj[key] = arguments.callee(obj[key]) ;
                }
                return newObj ;
            }

    其实函数的复制可以用eval(fun.otStrng())这样,加上对对象的判别,就完成里一个obj中有函数或者引用类型的复制。

    注:es6中其实已经有isArray这个函数了,用法是Array.isArray(yourArr),返回一个bool值

  • 相关阅读:
    Android之Handler实现延迟执行
    static{}语句块
    (转)git常见错误
    smarty使用
    git简易操作
    angular路由——ui.route
    angular服务二
    angular服务一
    angualr 实现tab选项卡功能
    EF 集合版 状态版的 增加、删除、修改 的实践
  • 原文地址:https://www.cnblogs.com/maskmtj/p/9524413.html
Copyright © 2011-2022 走看看