对实例的不同操作为什么分别改变的是其 实例 或者 原型对象

来源: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数组,一个没有改变,一个指向变化了。。。

0
0

前端跳槽面试必备技巧 面试官全流程指导

一门让你能成功获取前端 Offer 的课程, 不只是技术,面试“技巧”也至关重要

4836 学习 · 830 问题

查看课程