Vueコンポーネントのdataはなぜ関数でなければならないのですか?
1313 ワード
実はこれはvue自体の設計とは関係なくjs自体の特性によるものです.
jsのプロトタイプチェーン:
上は仮想コンポーネントコンストラクタで、実際のコンポーネントコンストラクタの方法はたくさんあります.
2つのコンポーネントインスタンス、すなわち呼び出しによって作成された2つのインスタンスをインスタンス化します.
上のコードの最後の3つの文が表示されます.これはお父さんです.2つのインスタンスが同時に1つのオブジェクトを参照すると、1つのプロパティを変更すると、別のインスタンスも変更されます.これはどうしてできますか.2つのインスタンスにはそれぞれのドメインがあるはずです.そのため、以下の方法で処理する必要があります.
これにより、各インスタンスのdataプロパティは独立しており、相互に影響しません.だから、vueコンポーネントのdataが関数でなければならない理由を知っていますよね.
jsのプロトタイプチェーン:
var MyComponent = function() {}
MyComponent.prototype.data = {
a: 1,
b: 2,
}
上は仮想コンポーネントコンストラクタで、実際のコンポーネントコンストラクタの方法はたくさんあります.
var component1 = new MyComponent()
var component2 = new MyComponent()
2つのコンポーネントインスタンス、すなわち呼び出しによって作成された2つのインスタンスをインスタンス化します.
component1.data.a === component2.data.a // true
component1.data.b = 5
component2.data.b // 5
上のコードの最後の3つの文が表示されます.これはお父さんです.2つのインスタンスが同時に1つのオブジェクトを参照すると、1つのプロパティを変更すると、別のインスタンスも変更されます.これはどうしてできますか.2つのインスタンスにはそれぞれのドメインがあるはずです.そのため、以下の方法で処理する必要があります.
var MyComponent = function() {
this.data = this.data()
}
MyComponent.prototype.data = function() {
return {
a: 1,
b: 2,
}
}
これにより、各インスタンスのdataプロパティは独立しており、相互に影響しません.だから、vueコンポーネントのdataが関数でなければならない理由を知っていますよね.