为什么data属性必须声明为返回一个初始数据对应的函数呢?
-
对象为引用类型,当重用组件时,由于数据对象都指向同一个data对象,当在一个组件中修改data时,其他重用的组件中的data会同时被修改;而使用返回对象的函数,由于每次返回的都是一个新对象(Object的实例),引用地址不同,则不会出现这个问题。
-
防止组件复用数据,data必须为一个函数,因为实例可以维护一份被返回对象的独立的拷贝
data(){ return { content: 0 } }
-
对象为引用类型,当重用组件时,由于数据对象都指向同一个data对象,当在一个组件中修改data时,其他重用的组件中的data会同时被修改;而使用返回对象的函数,由于每次返回的都是一个新对象(Object的实例),引用地址不同,则不会出现这个问题。
说的好
-
对象为引用类型,当重用组件时,由于数据对象都指向同一个data对象,当在一个组件中修改data时,其他重用的组件中的data会同时被修改;而使用返回对象的函数,由于每次返回的都是一个新对象(Object的实例),引用地址不同,则不会出现这个问题。
学习了
-
往简单了说,是为了阻止相同vue组件之间共享data。往复杂了说,js引擎在编译代码的时候,会尝试为所有import引入的模块分配地址,相同的模块只会分配一次地址,执行时按照引用取值,同样的引用拿到的对象是一样的,其内部的data属性也是一样的。dat改成函数以后,每次 return 都会重新分配内存创建新对象,就不存在同样的引用这个问题。
-
公司的面试题中也有这么一题
如果是公共组件确实必须要返回一个函数,
但是如果不是可以直接一个对象因为没有执行函数return之后返回的都是一个全新的对象(类似于工厂模式的设计思想),
虽然我们一样, 但是我们又没有关系. 避免数据混淆