vue系列:data爲什麼必須是一個返回對象的方法

結論

因爲對象是引用數據類型,如果你寫成對象,這個組件在多處被引用,只要修改一處的值,那麼另一處的引用的值也會變化,這樣就亂套了。

而使用返回對象的函數,由於每次返回的都是一個新對象(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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章