為什么vue組件中的data不是一個對象而是一個函數


  如果兩個實例引用同一個對象,當其中一個實例的屬性發生改變時,另一個實例屬性也隨之改變,只有當兩個實例擁有自己的作用域時,才不會相互干擾。

  這是因為JavaScript的特性所導致,在component中,data必須以函數的形式存在,不可以是對象。

  組建中的data寫成一個函數,數據以函數返回值的形式定義,這樣每次復用組件的時候,都會返回一份新的data,相當於每個組件實例都有自己私有的數據空間,它們只負責各自維護的數據,不會造成混亂。而單純的寫成對象形式,就是所有的組件實例共用了一個data,這樣改一個全都改了。

 

 1         function Box(){
 2 
 3         }
 4         Box.prototype.data={
 5             msg:"aaa"
 6         };
 7         var b1=new Box();
 8         var b2=new Box();
 9         b1.data.msg="bbb";//--------------這里修改一個實例的屬性,會造成另一個實例的屬性也跟着修改了
10         console.log(b1.data.msg);//------bbb
11         console.log(b2.data.msg);//------bbb
 1         function Box(){
 2             this.data=this.data();
 3         }
 4         Box.prototype.data=function(){
 5             return{
 6                 msg:"aaa"
 7             }
 8         };
 9         var b1=new Box();
10         var b2=new Box();
11         b1.data.msg="bbb";//-----------------如果是函數的形式去定義的屬性,這樣它們有自己的作用域,在修改的時候不會影響到別人
12         console.log(b1.data.msg);//----bbb
13         console.log(b2.data.msg);//----aaa


免責聲明!

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



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