物件導向中,instance一般稱為實例、副本,或稱之為實體
所謂instance就是實際在記憶體佔有位置的物件,以new關鍵字創造instance時,是在記憶體畫一塊空間給該物件,儲存該物件的相關資訊,每個屬性和方法都在該空間佔有一席之地,儲存對應的值
在使用new關鍵字建立新的instance時,需給予一個變數儲存其指標,例如:
var obj = new Object( );
在javascript中,上列語法等同下列:
var obj = {};
' { } ' 這個大括弧就好像在記憶體上畫一塊地,說這是我的地盤,需要注意的是obj代表的只是這塊地的地圖,而不是這塊地本身
obj.name = '';
obj.age = '';
這就好比是在自己的地盤上再切割小的區塊,並分別為其取名為name和age
obj.name = 'Ryu';
obj.age = 33;
接著我們在name區塊上寫下Ryu這三個字,在age區塊上寫下33這個數字
var map = obj;
這並未在記憶體上再畫一塊地給map,而只是將地圖複製了一份到map上
map 和 obj指向的都是同一塊地,這塊地有著name和age兩個區域
obj = '';
這清除了存放在obj中的地圖,無法再使用它找到那塊地,但那塊地依然存在
obj.name
找不到那塊地,自然也找不到name區域
map.name
還好,有先備份了一份地圖,還可以靠它找到那片土地,找到其中的name區域,並取得寫在該區域上的東西
obj = new Object();
接著我們在記憶體上畫了一塊新的空地,並把地圖放進obj中
現在我們總共擁有兩塊地了,並分別將位置記錄在map和obj這兩個變數中
map = '';
一不小心,弄丟了其中一塊地的地圖,其僅存的一張地圖,從此我們再也無法到達那塊地了,也無法再看到那塊地有哪些區域,以及區域上寫些什麼了
雖然我們已經不知道如何到達那塊地,但它一直都在那裡,過了一陣子,土地管理者(garbage collector)發現這塊地無人使用,也沒有任何地圖指向它,便再度開放給有需要的人使用了
那塊不知道怎麼到達的地,最後該怎麼辦?
回覆刪除他永遠在那裏佔一個記憶體耶?
土地管理者又該如何找到他啊??
又要怎麼開放給有需要的人使用勒?
沒有人參照到該土地後,javascript 的記憶體管理機制(garbage collector)會回收它,釋放佔用的記憶體,至於管理機制實際上怎麼運作,如何檢查參照,我也不清楚,一般使用者應該是不太需要知道
回覆刪除