为了账号安全,请及时绑定邮箱和手机立即绑定

帮我看看js引用类型吧

帮我看看js引用类型吧

清风流光 2017-04-24 18:31:01
function setName(obj) { obj.name = "Nicholas"; obj = new Object(); obj.name = "Greg"; } var person = new Object(); setName(person); alert(person.name); //"Nicholas"person是一个带有指向new Object的地址的栈,new Object是一个堆,obj是本地参数,setName(person) 意思是 本地参数obj=person,成为具有相同值和地址的栈,也指向new Object,在函数内部它的person.name='Nicholas',根据地址指向在new Object内保存了属性,person=new Object(),函数内新建立了一个new Object的堆,此时person指向发生了改变,新的obj.name指向新的new Object,因此在obj = new Object()时原指向已经失效,所以alert(person.name)弹出的是'Nicholas'.以上是我个人的理解,不知道对不对,还有应该怎么调用新堆中的name属性?
查看完整描述

3 回答

?
qq_青枣工作室_0

TA贡献446条经验 获得超754个赞

理解的对。obj = new Object()时,obj的原指向已经失效。但是,person依然在指向着。

要调用局部变量里新堆的name属性,可以return obj;

或者,用一个全局变量来指向它 window.newObj = obj;

或者,直接用外部变量person指向它 person = obj;

查看完整回答
1 反对 回复 2017-04-25
  • 3 回答
  • 0 关注
  • 1548 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信