prototype和_proto的关系
prototype
显式原型
_proto_
隐式原型
prototype,每一个函数对象都有一个显式的prototype属性,它代表了对象的原型(Function.prototype函数对象是个例外,没有prototype属性)。_proto_:每个对象都有一个名为_proto_的内部隐藏属性,指向于它所对应的与原型对象。原型链正是基于_proto_才得以形成的
显式原型
每一个函数在创建之后都会拥有一个名为prototype的属性,这个属性指向函数的原型对象。
隐式原型
JavaScript中任意对象都有一个内置属性[[prototype]],在ES5之前没有标准的方法来访问这个内置属性,但大多数浏览器都支持通过_proto_来访问。ES5中有了对于这个内置属性标准的Get方法: Object.getPrototypeOf()
二者的关系
隐式原型指向创建这个对象的函数(constructor)的prototype
二者的作用
显式原型的作用
用来实现基于原型的继承与属性的共享
隐式原型的作用
构成原型链,同样用于实现基于原型的继承。举个例子,当我们访问obj这个对象中的x属性时,如果在obj中找不到,那么就会沿着_proto_依次查找。
构造函数的显示原型和隐式原型
内建对象:比如数组
Array.prototype也是一个对象,对象就是由Object()这个构造函数来创建的。因此Array.prototype._proro_ == Object.prototype //true,或者可以这么理解,所有的内建函数都是由Object()创建而来的