首先看個例子
new Vue({
el: '#app',
template: `<div>{{demo}}</div>`,
data: {
demo: 123
}
})
在new vue()中恕齐,data可以直接是一個對象,為什么在vue組件中瞬逊,data必須是一個函數(shù)呢显歧?
我們大致可以通過js原型鏈
來對比下:
var Component = function() {};
Component.prototype.data = {
demo: 123
}
var component1 = new Component();
var component2 = new Component();
component1.data.demo = 456;
console.log(component2.data.demo); // 456
從上面可以看出,兩個實例都引用同一個對象确镊,其中一個改變的時候士骤,另一個也發(fā)生改變。
每一個vue組件都是一個vue實例蕾域,通過new Vue()實例化拷肌,引用同一個對象,如果data直接是一個對象的話旨巷,那么一旦修改其中一個組件的數(shù)據(jù)巨缘,其他組件相同數(shù)據(jù)就會被改變。
而data是函數(shù)的話采呐,每個vue組件的data都因為函數(shù)有了自己的作用域若锁,互不干擾。