https://vuejs.org/v2/guide/co…
尝试还原情景: 一个构造函数, 传入相同参数, 创建多个实例
使用对象时
const myself = {
firstname: 'wei',
lastname: 'chen'
}
function TestFunc(obj){this.person = obj}
const instance1 = new TestFunc(myself)
const instance2 = new TestFunc(myself)
instance1.person.firstname = 'li'
instance2.person.lastname = 'siyuan'
myself.firstname = 'random'
console.log(myself)
console.log(instance1, instance2)
打印结果如下:
由上图可以看出, myself, instance1.person, instance2.person 指向的是同一个对象, 一变都会变. 根本原因是 js 对于对象是传引用的
同样地, 如果 Vue 中组件的 data 选项是对象, 那么实例 $data 指向的是同一个对象
使用函数时
function myself(){
return {
firstname: 'wei',
lastname: 'chen'
}
}
function TestFunc(func){this.person = func()
}
const instance1 = new TestFunc(myself)
const instance2 = new TestFunc(myself)
instance1.person.firstname = 'li'
instance2.person.lastname = 'siyuan'
console.log(instance1, instance2)
console.log(myself())
打印结果如下:
由上图可以看出, 通过函数生成了不同的对象, 属性的改变不会再互相影响
function myself(){
return {
firstname: 'wei',
lastname: 'chen'
}
}
const obj1 = myself()
const obj2 = myself()
console.log(obj1 == obj2) //false
Vue- 组件的 data 属性为什么必须是函数?https://axiu.me/coding/why-vu…