记录高级js学习(九)原型与原型链

74 阅读1分钟

原型

原型包括显式原型隐式原型,每个对象都具有隐式原型,只有函数拥有显式原型

获得显式原型的方法:

1.foo.prototype

获得隐式原型的方法:

1.浏览器提供的方法:obj.__proto__

2.ES5以后获取的方法:Object.getPrototypeOf(obj)

在通过new调用构造函数的时候,会将foo.prototype 赋值给obj.__proto__,这也是可以说是原型链的由来

function foo(){}
let obj = new foo()  //  obj.__proto__ = foo.prototype

foo.prototype有个constructor指向foo自己

image.png

原型链

一个对象的隐式原型指向其构造函数的显式原型,构造函数也是个对象,也有隐式原型,依次往上指直至顶层Object.prototype形成的链式结构叫作原型链

image.png

图解,从下往上:

通过new foo()生成的对象obj,obj.__proto__ = foo.prototype (foo的原型对象)

每个function都由new Function构造,所以 foo.__proto__ = Function.prototype (所有函数的构造函数)

Function函数自己构建自己,所以 Function.__proto__ = Function.prototype (特殊情况)

任何原型对象都是由new Object构造的, 所以 foo.prototype.__proto__ = Object.prototype

Object.prototype属于顶层对象了,Object.prototype.__proto__ = null 为原型链的终点