如果兩個實例引用同一個對象,當其中一個實例的屬性發生改變時,另一個實例屬性也隨之改變,只有當兩個實例擁有自己的作用域時,才不會相互干擾。
這是因為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