老师您好, 关于原型的问题

来源:1-1 课程导学

燎丶Trance

2021-11-11

function User() {}
User.prototype = { username: 'alex' }
var a = new User()
var b = new User()
console.log(a.username)
console.log(b.username)
console.log('=======================================================================')
User.prototype = { username: 'jack' }
console.log(a.username)
console.log(b.username)

图片描述

实例不是共享同一个原型对象空间吗, 正常来说应该指向同一块内存空间
为什么我在先创建了2个实例后再覆盖原型对象, 但是根据打印结果来看却还是指向原来的原型对象空间

写回答

1回答

keviny79

2021-11-11

function User () { }

User.prototype = { username: 'alex' }

var a = new User()

var b = new User()

// 到这个位置, a.__proto__,b.__proto__,User.prototype 一起指向{ username: 'alex' }这个原型对象空间

console.log(a.username)

console.log(b.username)

console.log('=======================================================================')

User.prototype = { username: 'jack' }

// 到这个位置改变 User.prototype原型属性指向,让其指向新的原型对象空间【 { username: 'jack' }】

// 但是 a.__proto__,b.__proto__,还指向着原来的{ username: 'alex' }原型对象空间

console.log(a.username)//依然访问{ username: 'alex' }原型对象空间

console.log(b.username)//依然访问{ username: 'alex' }原型对象空间


0
1
燎丶Trance
明白了 就是改变原型之前 之前原型的内存空间并不会被回收 之前创建的对象 依然指向原来那块原型空间, 谢谢老师
2021-11-11
共1条回复

晋级TypeScript高手,成为抢手的前端开发人才

轻松驾驭 TypeScript 高级用法, 突破前端成长瓶颈

871 学习 · 425 问题

查看课程