vue data中的this指向問題


 

 在data里定義Object類型的變量時,會發現Object中訪問不到vue的this屬性。

例如:

 1 export default {
 2   data(){
 3     return {
 4       a: "123",
 5       b: {
 6         c: this.a
 7       }
 8     };
 9   },
10   created() {
11     console.log("b: ", this.b.c); // undefined
12   }
13 }

想在b中訪問this.a的數據,直接訪問會返回undefined,因為這時c中的this指向的是b。

這種情況可以用到Object的get屬性進行屬性定義。

例如:

 1 export default {
 2   data(){
 3     return {
 4       a: "123",
 5       b: {
 6         _target: () => this,
 7         get target() {
 8           return this._target();
 9         },
10         
11         get c() {
12           return this.target.a;
13         },
14       },
15     };
16   },
17   created() {
18     console.log("b: ", this.b.c); // 123
19   }
20 }

此處將this映射到了Object變量內部,然后通過get的形式定義屬性並獲取。

 

當get定義的屬性所依賴的屬性的值發生改變時,get定義的屬性的值也將發生改變。

例如:

 1 export default {
 2   data(){
 3     return {
 4       a: "123",
 5       b: {
 6         _target: () => this,
 7         get target() {
 8           return this._target();
 9         },
10 
11         get c() {
12           return this.target.a;
13         },
14 
15         d: 123,
16 
17         get e() {
18           return `依賴於d的值, 會同步發生改變, d的值為: ${this.d}`;
19         }
20       },
21     };
22   },
23   created() {
24     console.log("b: ", this.b.c); // 123
25 
26     console.log("e: ", this.b.e); // e:  依賴於d的值, 會同步發生改變, d的值為: 123 c: 123
27 
28     setTimeout(() => {
29       this.b.d = 456;
30       console.log("e: ", this.b.e); // e:  依賴於d的值, 會同步發生改變, d的值為: 456 c: 123
31     }, 1000);
32 
33     setTimeout(() => {
34       this.a = "456";
35       console.log("e: ", this.b.e); // e:  依賴於d的值, 會同步發生改變, d的值為: 456 c: 456
36     }, 2000);
37   }
38 }

當前方法更像是一種深度計算屬性(computed),會隨着所依賴的項發生改變而改變。

 

​轉載自:https://blog.csdn.net/s4944315/article/details/120313437


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM