对实例的不同操作为什么分别改变的是其 实例 或者 原型对象
来源:3-13 面向对象(二)

慕九州9016164
2019-03-15
function class1() { this.type = 'class1' this.play = [1, 2, 3] this.sex = { sex: 'female' } } function student1() { this.name = 'student1' } student1.prototype = new class1 // prototype就是student1的构造函数的属性,作用就是使构造函数的实例能访问到原型对象上 let stu = new student1(); let stu1 = new student1(); console.log(stu.play, stu1.play) stu.play.push(4) stu.play = [1] console.log(stu, stu1)
这里stu.play.push(4) 改变的是其原型对象,两个实例都被改变了,但是stu.play = [1] 却是对其stu实例做的操作,请问是因为push方法直接操作原型对象的内存地址,而直接复制是只对对应的实例内存地址做操作么?
写回答
1回答
-
飞行的荷兰人
2019-03-17
这代码太不规范了, new 了也不调用......,构造函数一般用大写区分... -_-!,,,push 是在play数组上添加一个值类型的数据,直接加上去。然而[1]是一个数组,是引用类型reference,在内存中有自己的地址,赋值了指向就发生了改变,指向了这个引用类型。这个时候访问两个实例的play数组,一个没有改变,一个指向变化了。。。
00
相似问题