javascript - Vue.js 将 getter 存储在变量中时会发生奇怪的事情
问题描述
我是日本人,英语不好,抱歉。
这是一个非常简单的 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 存储在 variable 中。
但我不知道原因。
为什么会发生这种情况?
解决方案
为什么应该temp
永远是{ someStrItem: '' }
?
让我们来看看发生的阶段:
- 您的组件被实例化为
data
:
{
someObj: {
someStrItem: 'str'
}
}
getObj
自动computed
为
{
someStrItem: 'str'
}
- 当你打电话
console.log(temp)
时changeObj
,this.getObj
仍然有价值
{
someStrItem: 'str'
}
推荐阅读
- ios - 如何在 Swift 中从图像中检测条形码?
- bluetooth-lowenergy - 如何找到BLE设备不同UUID对应的句柄
- apache-spark - 此查询不支持从检查点位置恢复。删除检查点/testmemeory/offsets 重新开始
- keras - 在循环中创建密集层
- sqlite - SQLite Window 函数避免聚合重复
- php - 防止 Jqueryvalidation 在打开模式时验证远程
- javascript - 我如何将 html 输入数据传递给 javascript
- javascript - 在响应式布局中使用 CSS“宽度:适合内容”的一个很好的替代方案?
- react-native - 如果我需要从 npm 模块手动自定义代码,我应该怎么做
- oracle - 如何获取已删除重复项的数据?