关于原型

来源:4-3 异步编程解决方案Promise(1)

DF11G

2020-12-20

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

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]
写回答

2回答

慕粉0907293704

2022-07-20

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
0

谢成

2020-12-21

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

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

0
1
DF11G
既然原型中的属性被所有实例共享,那么创建一个新实例的时候,原型中的基本数据类型属性会被新实例拷贝一份对吗?
2020-12-21
共1条回复

JavaScript ES(6-11)全版本语法 前端都需要的基础课

前端无门槛学习,从ES6到ES11,一套课程掌握JS最新语法

1328 学习 · 296 问题

查看课程