请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于原型

请问在实例中修改原型的引用类型属性,会影响所有实例;那为什么修改值类型不会受影响呢

function Person() {
    Person.prototype.name = 'Faker'
    Person.prototype.age = 24
    Person.prototype.champion = [3, 5, 6]
    Person.prototype.showName = function () {
        console.log(this.name)
    }
    Person.prototype.showChampion = function () {
        console.log(this.champion)
    }
}

let Faker = new Person()
let Bang = new Person()
Bang.name += 'hahah'
Bang.champion.push(7)
Faker.showName() // Faker
Bang.showName() // Fakerhahah
Faker.showChampion() // [3, 5, 6, 7]
Bang.showChampion() // [3, 5, 6, 7]

正在回答 回答被采纳积分+3

2回答

慕粉0907293704 2022-07-20 09:26:17
Bang.name += 'hahah'                                  
  // 这里只修改了类下面的普通name属性,并没修改上文定义的 prototype 下面的 name,
Bang.champion.push(7)
Faker.showName() // Faker
Bang.showName() // Fakerhahah                        
   // 这里也只是访问了实例普通name属性,所以是读取是修改后普通name,
   // 你要是访问 Bang.__proto__.name还是Faker
Faker.showChampion() // [3, 5, 6, 7]
Bang.showChampion() // [3, 5, 6, 7]
console.log(Bang.__proto__.name)


0 回复 有任何疑惑可以回复我~
谢成 2020-12-21 09:50:02

在const那一节讲了基本数据类型和引用数据类型的存储方式的区别。

引用数据类型指向的是同一个内存空间。

0 回复 有任何疑惑可以回复我~
  • 提问者 DF11G #1
    既然原型中的属性被所有实例共享,那么创建一个新实例的时候,原型中的基本数据类型属性会被新实例拷贝一份对吗?
    回复 有任何疑惑可以回复我~ 2020-12-21 14:51:54

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信