浅谈克隆 JavaScript


Posted in Javascript onNovember 02, 2021

1、浅克隆

浅克隆无法copy数组和对象

var obj = {
    name : "abs",
    age : '18',
    sex : 'male'
}
var obj1 = {}
function clone(Origin,target) {
    target = target || {};//防止用户不输入target
    for(var k in Origin){
        target[k] = Origin[k];
    }
}
clone(obj,obj1);

2、深克隆

先判断它是什么,原始值,数组还是对象,分别处理

  • 遍历对象
  • 是原始值直接copy
  • 不是原始值判断是数组还是对象
  • 是数组建空数组
  • 是对象建空对象
  • 建立了之后再遍历一遍原始对象或数组里是啥
  • 递归
var obj = {
    name : 'lin',
    age : '18',
    sex : 'male',
    card : [1,2,3,4],
    wife : {
        name : 'bcsds',
        son : {
            name : 'aaa'
        },
        age : '23'
    }
}
var obj1 = {}
//原始值和对象数组typeof返回值有区别
function deepClone(origin,target) {
    target = target || {};
    for(var k in origin) {
        if(origin.hasOwnProperty(k)){
            if(typeof(origin[k]) == 'object') {
                if(Object.prototype.toString.call(origin[k]) == '[object Array]') {
                    target[k] = [];
                }else {
                    target[k] = {};
                }
                deepClone(origin[k],target[k]);
            }else {
                target[k] = origin[k];
            }
        }
    }
}
deepClone(obj,obj1);
Javascript 相关文章推荐
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
Apr 01 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
Mar 21 Javascript
js制作的鼠标悬浮时产生的下拉框效果
Oct 27 Javascript
多种js图片预加载实现方式分享
Feb 19 Javascript
详解JS去重及字符串奇数位小写转大写
Dec 29 Javascript
初探JavaScript 面向对象(推荐)
Sep 03 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
Dec 10 Javascript
JavaScript 五大常见函数
Mar 23 Javascript
学习Vue组件实例
Apr 28 Javascript
JSONP原理及应用实例详解
Sep 13 Javascript
layui实现给某一列加点击事件
Oct 26 Javascript
vue props 单项数据流实例分享
Feb 16 Javascript
WebWorker 封装 JavaScript 沙箱详情
quickjs 封装 JavaScript 沙箱详情
Nov 02 #Javascript
js 数组 fill() 填充方法
浅谈 JavaScript 沙箱Sandbox
详解 TypeScript 枚举类型
Nov 02 #Javascript
前端JavaScript大管家 package.json
JavaScript 原型与原型链详情
You might like
精致的人儿就要挑杯子喝咖啡
2021/03/03 冲泡冲煮
PHP 配置文件中open_basedir选项作用
2009/07/19 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
Symfony生成二维码的方法
2016/02/04 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
JavaScript 封装Ajax传递的数据代码
2009/06/05 Javascript
Javascript的一种模块模式
2010/09/08 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
javascript对象的使用和属性操作示例详解
2014/03/02 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
js判断手机和pc端选择不同执行事件的方法
2015/01/30 Javascript
Javascript实现单例模式
2016/01/24 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
Angular.JS中的this指向详解
2017/05/17 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
JavaScript实现元素滚动条到达一定位置循环追加内容
2017/12/28 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
2018/05/25 Javascript
详解es6超好用的语法糖Decorator
2018/08/01 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
Vue——解决报错 Computed property "****" was assigned to but it has no setter.
2020/12/19 Vue.js
Python Web框架Tornado运行和部署
2020/10/19 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
2016/09/11 Python
Python处理文本文件中控制字符的方法
2017/02/07 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
师范应届生求职信
2013/11/15 职场文书
食品销售计划书
2014/04/26 职场文书
跑操口号
2014/06/12 职场文书
服务承诺书
2015/01/19 职场文书
安全知识竞赛主持词
2015/06/30 职场文书
Javascript设计模式之原型模式详细
2021/10/05 Javascript