這幾天經過完成issue對面向對象有了新的認識。編程
在接觸一個子組件父組件的時候,自組件改變了對象的值,可是並無傳給父組件,最後在父組件保存生效了,那麼,他是如何將值傳給父組件的呢。
經過潘老師的指導,
我認識到對象與變量的不同。
首先,咱們這裏父組件經過@input方式傳給子組件了part對象。學習
@Input() part: Part;
而自組件改變part對象的某個屬性,父組件裏的part對象是跟着變得,換句話說,子組件與父組件爲引用的爲同一個對象。
咱們看一下《Head First Java》對此內容的介紹,
這幾張圖形象的說明了對象引用的規則。經過這張圖,咱們能夠假設@input做用至關於this
part(子組件part對象) = _part(父組件part對象)
這時候咱們就不難理解爲何子組件對象的某一屬性改變而父組件對象屬性爲何跟着改變了。正如第二個圖示的那樣,
咱們子組件與父組件的變量都指向了同一對象。當一者將對象進行改變時,另外一我的再去讀取對象,對象已經改變了。
讓咱們用一個demo來驗證spa
public class Dog { public int weight; } class dogTest { @Test void test() { Dog b = new Dog(); Dog c = new Dog(); c = b; System.out.println(c.weight); b.weight = 10; System.out.println(c.weight); } }
正如前面所說,若是兩個變量指向同一個對象,那麼經過其中一個改變對象的屬性,另外一個變量也會改變。3d
咱們大一學面向對象編程思想的時候常背的就是面向對象三大特性,可是什麼是封裝沒學明白。
其實咱們的項目一直在使用封裝,好比咱們在後臺加一個字段,一般狀況下是在實體類新建一個屬性,而後再給他get方法和set方法,這種作法即是封裝。code
public class Dog { private int weight; public int weight() { return weight; } public void setWeight(int weight) { this.weight = weight; } }
咱們注意到,咱們將屬性設爲私有屬性,而經過公有的weight與setWeight方法進行讀取與設置。這是爲何呢
其實咱們如今尚未體現封裝的優勢。咱們觀察這個類,weight表明狗的重量,重量就應該是一個大於0的值。假如咱們設置weight爲公有屬性並經過dog.weight傳值,咱們就有可能傳入一個錯誤的值對象
Dog dog = new Dog(); // 此爲錯誤演示 dog.weight = -10;
而經過封裝,咱們在setWeight方法設置校驗。blog
public void setWeight(int weight) { if (weight > 0) { this.weight = weight; } }
則能夠避免數據出錯的問題。
雖然咱們如今並無在實際項目中使用封裝帶來的好處,可是咱們仍然進行封裝,這容許咱們在將來某一天回心轉意時能夠快速更改。get
學習是一個理論與實踐相互結合的過程,我在大一下學期沒學明白的面向對象,將在將來的實踐中逐步理解。input