目录
1.每个函数都有一个prototype属性,它默认指向一个object空对象。
2.原型对象中有一个属性constructor,它指向函数对象。
1.每一个函数function都有一个prototype,即显式原型
2.每个实例对象都有一个__proto__,可称为隐式原型:
一、函数的prototype属性
1.每个函数都有一个prototype属性,它默认指向一个object空对象。
function Fun(){
}
console.log(Fun.prototype,typeof Fun.prototype);
输出结果:
2.原型对象中有一个属性constructor,它指向函数对象。
function Fun(){
}
console.log(Fun.prototype.constructor===Fun);
输出结果:
3.给原型对象添加属性,实例对象可以访问
function Fun(){
}
Fun.prototype.test=function(){
console.log('test()');
}
var fun=new Fun();
fun.test();
输出结果:
二、隐式原型和显示原型
1.每一个函数function都有一个prototype,即显式原型
function Fn(){
}
console.log(Fn.prototype);
2.每个实例对象都有一个__proto__,可称为隐式原型:
function Fn(){
}
var fn = new Fn();
console.log(fn.__proto__);
3.对象的隐式原型的值为其对应构造函数显的式原型的值
function Fn(){
}
console.log(Fn.prototype===fn.__proto__);
三、关于原型链
访问一个对象的属性时,先在自身属性中查找,找到返回,如果没有,再沿着__proto__这条链向上查找,找到返回,如果最终没找到,返回undefined。
别名:隐式原型链。
作用:查找对象的属性。
function Fn(){
this.test1=function(){
console.log('test1()');
}
}
Fn.prototype.test2=function(){
console.log('test2()');
}
console.log(Fn.prototype);
var fn=new Fn();
fn.test1();
fn.test2();
原型链查找图: