3 回答

TA贡献1831条经验 获得超9个赞
如果我在 Vue 对象中绑定一个变量,即 data: {x: a} 其中 a 是某个变量,然后我更改了 a 的值,我的印象是它会将 data.x 的值更改为嗯,不是吗?
这种误解是造成麻烦的原因,它与 Vue 无关,而是与 Javascript 和对象引用的工作方式有关。简而言之:您的陈述仅当a
是一个对象时才为真。在您的示例中,它不是,它是原始 Number 类型。
为什么这有关系?因为在 Javascript 中,当一个变量持有一个对象时,它实际上只包含对该对象的引用。但是当变量包含原始类型时,它包含实际值。 这意味着多个变量可能持有对同一个对象的引用。
如果a
一直是个对象,then--由于Javascript对象的性质references--设置{x: a}
岂不是x
和a
每个商店引用同一个对象。您可以认为此对象不属于x
或a
,它们存储对它的引用。如果您随后从x
或 中更改此对象的属性a
,它将在两个地方都反映出来。
但既然a
是一个数字,那么——由于 Javascript 原语的性质——设置{x: a}
意味着x
接收a
' 的值的副本,因为它在那一刻。没有参考,没有联系。它们都立即包含完全独立的原始值。

TA贡献1824条经验 获得超6个赞
当你声明
a: x.a
您正在分配一个初始值。
如果要更新该值,则需要对 Vue Object 内部的变量进行更改。最佳实践,在组件内部使用方法:
var myVue = new Vue({
el: "#app",
data: {
unlocked: false,
a: 0,
b: 10
},
methods: {
increment() {
this.a++
console.log(this.a)
}
}
});
myVue.increment()
console.log(myVue.a)
添加回答
举报