函数的 原型(prototype)
函数的protot属性
- 每个函数都有一个prototype属性,它默认指向一个object空对象(即称为:原型对象)
- 原型对象中有一个属性constructor,它指向函数对象
给原型对象增加属性(个别都是办法)
作用:函数的所有实例对象主动领有原型中的属性(办法)
//每个函数都有一个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)//给原型对象增加属性(个别是办法)==>实例对象能够拜访
显式原型和隐式原型
- 每个函数function都有一个prototype,即显式原型(属性)
- 每个实例对象都有一个__proto__ ,可称为隐式原型(属性)
- 对象的隐式原型的值为其对应构造函数的显式原型的值
- 内存构造
总结
- 函数的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()