深拷贝方法

11 篇文章 0 订阅
9 篇文章 0 订阅
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>element-ui</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
</head>

<body>
    <div id="app">
        <el-button @click="copy">拷贝</el-button>
        <el-button @click="copyDeep">深拷贝</el-button>
        <el-button @click="modify">修改原数据</el-button>
        <p>原对象: <span>{{newObj}}</span></p>
        <p>浅拷贝:<span>{{myObj1}}</span></p>
        <p>深拷贝:<span>{{myObj2}}</span></p>
    </div>
    <script>
        new Vue({
            el: "#app",
            data: {
                newObj: {
                    name: "Frank",
                    age: 18,
                    nation: "china",
                    sex: "male"
                },
                myObj1: {
                    name: '我是对象1'
                },
                myObj2: {
                    name: '我是对象2'
                }
            },
            methods: {
                //深拷贝方法
                copyData(target) {
                    //先判断类型,再拷贝
                    function checkType(val) {
                        return Object.prototype.toString.call(val).slice(8, -1);
                    }
                    let res, type = checkType(target);
                    if (type === 'Object') {
                        res = {};
                    } else if (type === 'Array') {
                        res = [];
                    } else {
                        return target;
                    }
                    for (let i in target) { //数组和对象 for in 循环
                        let value = target[i];
                        if (checkType(value) === 'Object' || checkType(value) === 'Array') { //嵌套
                            res[i] = this.copyData(value);
                        } else { //基本数据或者函数
                            res[i] = value;
                        }
                    }
                    return res;
                },
                //拷贝
                copy() {
                    this.myObj1 = this.newObj;

                },
                //深拷贝
                copyDeep() {
                    this.myObj2 = this.copyData(this.newObj);
                },
                //修改原数据
                modify() {
                    this.newObj.name = '弗兰克';
                    this.newObj.age++;
                }
            }
        })
    </script>
</body>

</html>

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值