Skip to content
js
function User(name, age, mark) {
  this.name = name
  this.age = age
  this.mark = mark
  this.commonFirends = ['马云', '马化腾', '刘强东']
  this.show = function () {
    console.log(`name: ${this.name}, age: ${this.age}, mark: ${this.mark}`)
    console.log(`共同好友: ${this.commonFirends}`)
  }
}

// ming是对象变量,等号右边通过new出来一个实例
// 在运行期间在堆中开辟对象的内存空间
const ming = new User('小明', 30, '程序员')
const hua = new User('小花', 28, '时尚达人')

ming.show()
hua.show()

上面代码的栈堆示意图

Preview

可以看到commonFirends被开辟多次,希望commonFirends可以复用一个,则需要原型(继承)

  • 原型的定义:原型是js自动分配给【函数】的一个可以被所有构造函数实例对象变量共享的对象
  • __proto__在创建对象的时候js自动分配的属性,指向原型对象空间
  • 增加或者修改原型对象的属性或方法后,所有的实例或对象立即可以访问到(但创建实例后再覆盖原型除外)
  • 面试题:创建实例后再覆盖原型,实例对象无法访问到,为什么?
js
// 什么操作呢?大概就是这种

User.prototype = {}

// 这样再覆盖原型,因为prototype指向一个新的对象,覆盖前创建的实例指向另一个对象,所以无法访问覆盖后的原型
Preview