結論
因爲對象是引用數據類型,如果你寫成對象,這個組件在多處被引用,只要修改一處的值,那麼另一處的引用的值也會變化,這樣就亂套了。
而使用返回對象的函數,由於每次返回的都是一個新對象(Object的實例),引用地址不同,則不會出現這個問題。
舉例
對象方式:
var data = {
x: 1
}
var vm1 = {
data: data
}
var vm2 = {
data: data
}
vm1.data === vm2.data // true,指向同一個對象
函數方式:
var func = function () {
return {
x: 1
}
}
var vm3 = {
data: func
}
var vm4 = {
data: func
}
vm3.data() === vm4.data() // false,指向不同對象
函數方式中 data 都指向同一個函數,但這個函數每次的返回值都是一個新的對象
{x:1} === {x:1} // false
new Object({x:1}) === new Object({x:1}) // false