函数的 原型(prototype)

  1. 函数的protot属性

    • 每个函数都有一个prototype属性,它默认指向一个object空对象(即称为:原型对象)
    • 原型对象中有一个属性constructor,它指向函数对象
  2. 给原型对象增加属性(个别都是办法)

    • 作用:函数的所有实例对象主动领有原型中的属性(办法)

      //每个函数都有一个prototype属性,它默认指向一个Object空对象(即称为:原型对象)console.log(Date.prototype , typeof Date.prototype)function fun () {}fun.prototype.test = function () {  console.log('test()')}console.log(fun.prototype)  //默认指向一个Object空对象(没有咱们的属性)//原型对象中有一个属性constructor,它指向函数对象console.log(Date.prototype.constructor===Date)console.log(fun.prototype.constructor===fun)//给原型对象增加属性(个别是办法)==>实例对象能够拜访

显式原型和隐式原型

  1. 每个函数function都有一个prototype,即显式原型(属性)
  2. 每个实例对象都有一个__proto__ ,可称为隐式原型(属性)
  3. 对象的隐式原型的值为其对应构造函数的显式原型的值
  4. 内存构造
  5. 总结

    • 函数的prototype属性:在定义函数时主动增加的,默认值是一个空Object对象
    • 对象的__proto__属性:创建对象时主动增加的,默认值为构造函数的prototype属性值
    • 程序员能间接操作显式原型, 但不能间接操作隐式原型(ES6之前)
  //定义构造函数  function Fn(){    //外部语句:this.prototype = {}  }  //1.每个函数function都有一个prototype,即显式原型,默认指向一个空的Object对象  console.log(Fn.prototype)  //2.每个实例对象都有一个__proto__  ,可称为隐式原型  var fn = new Fn()    //外部语句:this.__proto__=Fn.prototype  console.log(fn.__proto__)  //3.对象的隐式原型的值为其对应构造函数的显式原型的值  console.log(Fn.prototype===fn.__proto__)     //true  //给原型增加办法  Fn.prototype.test = function(){    console.log('test')  }  //通过实例调用原型的办法  fn.test()