IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Web前端必做笔记之一:对象拷贝(二) 浅拷贝 -> 正文阅读

[JavaScript知识库]Web前端必做笔记之一:对象拷贝(二) 浅拷贝

Web前端必做笔记之一:对象拷贝(二) 浅拷贝

<div id="app">
       <form @submit.prevent = "insert">
              <input type="text" v-model="student.name">
              <input type="text" v-model="student.age">
              <button>添加</button>
       </form>
       <ul>
             <li v-for = "item in list">
                    姓名:{{item.name}}
                    年龄:{{item.age}}
             </li>

       </ul>
</div>
script>
new Vue({
  el: '#app',
  data: {
      student:{
            name:'',
            age:''
      },
      list:[]
  },
  methods:{
          insert(){

                console.log('hello world');
                this.list.push(this.student);

              }

         }
  })
</script>

在这里插入图片描述
首先我在输入框中写入小明和他的年龄,然后点添加,就可以看到添加成功了,我再添加三个,可以无限添加的,这是没有问题的,现在呢我把这个小明改成’小红’,然后我们会看到下面所有的小明都变成了小红,那为啥都变成了小红呢?

我们建立了一个数组叫做list[],我们往里面添加了东西,添加的student这个对象,我们往里面添加的都是这个student对象,而对象是存储在堆内存中,
他们都指向相同的一个对象,都是小明,这就是我们为啥改一个都变,
如何解决这个问题,我们可以给这个student做个克隆,或者说是拷贝完成之后,让这些对象不是一个对象

<script>
     
       //拷贝一个对象:让两个变量指向两个对象
       //如何拷贝

       let  obj = {
              name:"小明",
              age:2
       }
       
       let  newObj = {};
       for(let i in obj){
              console.log(obj[i]); //小明,2

              newObj[i] = obj[i]; //这样就实现了一个拷贝
       }
       obj.name ="小红"; //把这个obj的姓名改成小红,看看是否拷贝了两个,拷贝成功就是一个小红一个小明
       console.log(obj); //小红
       console.log(newObj); //小明
</script>
        //封装一个函数
       function copy(obj){  //拷贝我穿进来的obj
            
            let  newObj = {};
            for(let i in obj){
                  console.log(obj[i]);

                  newObj[i] = obj[i]; //这样就实现了一个拷贝
            }
           return  newObj;
       }  //这样就实现了一个对象的拷贝

       let newObject = copy(obj);
       console.log(obj); //小红
       console.log(newObject); //小明
<script>
//让vue中有个拷贝的函数
new Vue({
  el: '#app',
  data: {
      student:{
            name:'',
            age:''
      },
      list:[]
  },
  methods:{
          insert(){

                console.log('hello world');
            //     this.list.push(this.student);
                this.list.push(
                      this.copy(this.student)); //这样传的就是个student的副本
          },
          copy(obj){  //拷贝的方法
            let  newObj = {};
            for(let i in obj){
                  console.log(obj[i]);

                  newObj[i] = obj[i];
            }
           return  newObj;
       }
  }
})
</script>

在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-16 19:33:27  更:2021-10-16 19:33:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 18:14:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码