Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.1k views
in Technique[技术] by (71.8m points)

vue一段简单的代码出现奇怪的问题?

<script src="https://unpkg.com/vue/dist/vue.js"></script>
   <div id="app">
     <p>{{ b.d }}</p>
     <button @click="show({b,isShow: true})">click</button>
   </div>
   <script>
       new Vue({
         el: '#app',
         data: {
           b:{
               c:1
           }
         },
         methods:{
             show(a) {
                 console.log('a的值 = ', a)
                 a.b.d = 2
             }
         }
       })
   </script>

第一次点击传进来的a
image.png
第二次点击传进来的a
image.png
第一个问题为什么两次点击传的参数会不同,第二次点击传的参数a有第一次方法赋值的d?

两次点击打印的值
image.png
第二个问题,第一次console显示的参数a怎么和第一次断点显示的不一样?多了个d。还有给d赋值是在console的下一行,怎么提前就赋值了?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

你把b放在了a对象里啊,使用的是b对象的引用,也就是a.b和data里的b都是指向同一个地址。第一次点击后,对b赋了值,第二次当然就看到b的内容变了
console里打印对象,调用的是动态的,你去看的时候,第二次也点过了,内容就变了


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...