prototype和和_proto_的关系是什么

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()创建而来的