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

关于JS浅拷贝和深拷贝的问题

关于JS浅拷贝和深拷贝的问题

慕田峪8701529 2017-11-28 20:25:40
function People () { this.name='codeman' }; People.prototype = { showName : function () { alert(this.name); }, showAge : function () { alert(this.age); } }; function Student () { People.call(this); this.job='codeTeacher' }; for ( var k in People.prototype){ Student.prototype[k]=People.prototype[k];//这里的People.prototype[k]应该是一个方法(函数),也就是引用类型                                          // 那么当我更改Student里的showName方法的话,People里的不是也应该被改掉么,为什么没改掉 } // Student.prototype=People.prototype Student.prototype.showJob=function () { alert(this.job); } Student.prototype.showName=function() { alert('superman');              } var peo = new People(); peo.showName(); //还是‘codeman’
查看完整描述

2 回答

?
qq_药药_0

TA贡献52条经验 获得超27个赞

首先你这个没看错的话不是深克隆。深克隆的意思是,当你循环完对象之后。如果对象里面还有引用数据类型,如数组。还要遍历循环引用数据类型。你这个是浅克隆只循环了一遍,你寻找到的只是引用数据类型的指针,差不多就是这个意思。如果是深克隆,你自己还要写个判断函数,用递归。

查看完整回答
反对 回复 2017-11-29
  • 慕田峪8701529
    慕田峪8701529
    “Student.prototype[k]=People.prototype[k]”这里把people.prototype[k]赋值给Student.prototype[k],而People.prototype[k]如果是方法的话不就是属于引用类型了么,引用类型直接用来赋值,当修改Student.prototype[k]的话,那eople.prototype[k]岂不是也会变?
  • 慕田峪8701529
    慕田峪8701529
    可能您没理解我的问题的意思,我换个方式,还是上面这个例子,如果我使用Student.prototype=People.prototype的话,那么修改Student.prototype里的值,肯定会影响到People.prototype,因为对象的prototype属性也是一个对象,即引用类型,那为啥当Student.prototype[k]=People.prototype[k]就不会互相影响了呢
  • 2 回答
  • 0 关注
  • 1377 浏览
慕课专栏
更多

添加回答

举报

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