2012-09-04 39 views
3

這些是尼古拉斯扎卡斯的書摘,我不明白,請幫助我理解。本地對象在堆和工廠模式

function setName(obj) { 
obj.name = 「Nicholas」; 
obj = new Object(); 
obj.name = 「Greg」; 
} 
var person = new Object(); 
setName(person); 
alert(person.name); //」Nicholas」 

本地對象obj是死在後函數退出(當它返回物鏡太相同?)

人和堆OBJ是如在堆的單個對象副本或參考彼此?

他說:「當obj被覆蓋在函數內部時,它變成了一個指向本地對象的指針 。一旦函數完成執行,該本地對象就被銷燬了。

然後,他解釋說工廠模式如下:因爲現在

function createPerson(name, age, job){ 
    var o = new Object(); 
    o.name = name; 
    o.age = age; 
    o.job = job; 
    o.sayName = function(){ 
     alert(this.name); 
    };  
    return o; 

o是本地對象,他說:「這地方對象只要函數f nishes執行破壞」。因此,當函數返回Ô其是本地對象,如果我

var foo = createPerson(bla,18,student); 

然後foo是一個局部對象必須由隨後是死的參考。請澄清「返回本地對象的功能」的概念

對不起,對於很長的文章,MODS請編輯和濃縮如果需要。

回答

1

setName第一行運行obj參考點到已函數外部創建的對象person - 此對象的名稱設置爲Nicholas。因此,在此階段obj是在函數外部創建的參考person的副本。

setName時運行的第二線,所述本地obj參考被重新分配,以指向新的對象,所以,當obj.name被稱爲在第三行上它是有其名稱改爲Greg此新對象。該對象不受此名稱更改的影響。

在工廠的功能,這是不正確的說,「本地對象將立即銷燬函數FI nishes」 - 當地參考對象被銷燬,但對象本身在堆上創建並仍然存在。如果最後一行的工廠函數沒有return o,那麼這個對象將被垃圾收集,因爲一旦函數返回,就不存在對它的引用,但是o不是垃圾收集,因爲函數返回對它的引用。

+0

非常感謝,非常豐富。 –