function?setName(obj)?{
obj.name?=?"Nicholas";
obj?=?new?Object();
obj.name?=?"Greg";
}
var?person?=?new?Object();
setName(person);
alert(person.name);?//"Nicholas"person是一個(gè)帶有指向new Object的地址的棧,new Object是一個(gè)堆,obj是本地參數(shù),setName(person) 意思是 本地參數(shù)obj=person,成為具有相同值和地址的棧,也指向new Object,在函數(shù)內(nèi)部它的person.name='Nicholas',根據(jù)地址指向在new Object內(nèi)保存了屬性,person=new Object(),函數(shù)內(nèi)新建立了一個(gè)new Object的堆,此時(shí)person指向發(fā)生了改變,新的obj.name指向新的new Object,因此在obj?=?new?Object()時(shí)原指向已經(jīng)失效,所以alert(person.name)彈出的是'Nicholas'.以上是我個(gè)人的理解,不知道對(duì)不對(duì),還有應(yīng)該怎么調(diào)用新堆中的name屬性?
幫我看看js引用類型吧
清風(fēng)流光
2017-04-24 18:31:01