data為什么要是函數(shù)

看vue文檔時,一開始給的簡單實例中data都是對象建立,如

data: {
  a:1,
  b:2
}

但是到了組件內(nèi)容就明確強調(diào)了一點data必須是函數(shù)

data () {
  return {
    a: 1,
    b: 2,
  }
}

這主要的原因是JS原生中,如果在原型鏈中如果,如果定義成對象,在后面的實例中,一個實例對象的值有了變化,會影響所有的實例。
通過函數(shù)的形式,可以使得每個實例獨立,這樣數(shù)據(jù)變化也就不會影響其他實例。
對比下面兩種實例創(chuàng)建后的效果

var MyComponent = function() {}
MyComponent.prototype.data = {
  a: 1,
  b: 2,
}
// 上面是一個虛擬的組件構(gòu)造器,真實的組件構(gòu)造器方法很多

var component1 = new MyComponent()
var component2 = new MyComponent()
// 上面實例化出來兩個組件實例,也就是通過<my-component>調(diào)用,創(chuàng)建的兩個實例

component1.data.a === component2.data.a // true
component1.data.b = 5
component2.data.b // 5
var MyComponent = function() {
  this.data = this.data()
}
MyComponent.prototype.data = function() {
  return {
    a: 1,
    b: 2,
  }
}
component1.data.a === component2.data.a // true
component1.data.b = 5
component2.data.b // 2

所以data要設(shè)置成函數(shù)

引用自 https://segmentfault.com/q/1010000006242139的 李愛國 的答案

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容