为了账号安全,请及时绑定邮箱和手机立即绑定

Vue.js 当你在一个变量中存储一个 getter 时会发生奇怪的事情

Vue.js 当你在一个变量中存储一个 getter 时会发生奇怪的事情

红糖糍粑 2021-12-02 10:29:57
我是日本人,英语不好,抱歉。这是一个非常简单的vue代码。<template>  <div id="app">    <button @click.once="changeObj">      Click    </button>  </div></template><script>export default {  data () {    return {      someObj: {        someStrItem: 'str'      }    }  },  computed: {    getObj () {      return this.someObj    }  },  methods: {    changeObj () {      const temp = this.getObj      console.log(temp) // → { someStrItem: 'newStr' }      this.someObj.someStrItem = 'newStr'    }  }}</script>奇怪的是在 changeObj 函数内部。我预计 console.log(temp) 的结果是{ someStrItem: 'str' }因为this.someObj.someStrItem = 'newStr'我这样做之后  const temp = this.getObj  console.log(temp)但结果是{ someStrItem: 'newStr' }我不知道为什么会发生这种情况。好吧,我实际上通常不会做这样的事情。而且,我可以预料到会发生这种情况,因为我将返回对象的 getter 存储在变量中。但我不知道原因。为什么会发生这种情况?
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

为什么应该temp是{ someStrItem: '' }?


让我们来看看发生的各个阶段:


您的组件使用以下内容实例化data:

{

  someObj: {

    someStrItem: 'str'

  }

}

getObj自动computed为

{

  someStrItem: 'str'

}

当您调用console.log(temp)时changeObj,this.getObj仍然具有

{

  someStrItem: 'str'

}


查看完整回答
反对 回复 2021-12-02
  • 1 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信