初始面向对象之原型(续)

35 阅读1分钟
  • 原型作用
    • 把构造函数中公共的方法提取出来,放在原型中
  • 为什么要这样做?
    • 构造函数的原型上的方法或者属性,在每一个实例化对象中都能访问
function Person(name,age){
      this.name = name,
      this.age = age
    }
      //向函数的原型(对象)上添加一个属性age
      // Person.prototype.age = 18
      // Person.prototype.name = '千峰'
      Person.prototype.fn =  function (){
        console.log('我是添加到Person函数的原型对象上的一个函数')
      }
    
    let p1 = new Person('QF001',18)
    console.log(p1.__proto__ )

    let p2 = new Person('QF002',18)
    console.log(p2.__proto__ )

  • 对象的访问规则
    • 访问对象的某一个属性时,会现在对象本身去查找,找到就直接使用,如果没有找到
    • 那么会去对象的__proto__中去查找,找到就使用,如果没有找到
    • 那么会去这个对象(原型)的__proto__查找
    • 直到查找到JS的顶层对象Object.protype,如果还没找到就不再向上查找
      console.log(p1)
      console.log(p1.fn)
      p1.fn()


      console.log(p1.abc)  //undefined