1.隐式原型、显式原型
概念:
- 每个对象都拥有的属性
- 对象隐式原型的值为其对应构造函数显式原型的
例子:
例子代码:
function Fn(){
//函数内部语句
//this.prototype={}
//Fn的显式原型指向一个空对象
}
var fn=new Fn();
//内部语句
//fn.__proto__=this.prototype
//对象隐式原型的值为其对应构造函数显式原型的值
Fn.prototype.test=function() {
console.log('hello')
}
fn.test();
console.log(Fn.prototype,'\n---------\n',fn);
注意对象的prototype、__proto__属性也是一个对象
当调用fn.test()时会先到Fn的属性中找test方法找不到才回到Fn的显式原型中找test方法
2.原型链
概念:
简单理解就是原型链是用来查找对象属性的
例子:
fn在调用test时他会在他的隐式原型链查找test方法是否存在,首先到Fn的隐式原型中查找若没有,再到Object中查找
而Object的–proto–是整个原型链的尽头
注意点:
当设置对象属性值的时候不会去查找原型链。而是直接给对象添加属性,若对象没有该属性
例二:
整个函数新建时内部原型链的结构简单描述就如上图,可看出Function的隐式原型是等于显示原型的。