prototype和__proto__的关系是什么

看了很多文章来介绍 这个问题,想总结一下自己的一些理解

首先先定义一下,

prototype    是原型对象     显性原型   (是一个对象,只有函数对象才有这个属性)

__proto__  是原型链指向对象  隐性原型    (指向构造函数的 原型对象)


js  一切皆对象的思想  

null  -> object, Function ->  Number, String, Array, RegExp, Boolean -> 实例对象

Object.prototype    是个对象  是万物的始祖   万物始祖的原型链 是null  Object.prototype.__proto__ === null

Object.__proto__   是个函数对象     Object.__proto__ === Function.prototype  函数始祖

Function.prototype   是个函数对象    包装着所有 Function 的一些独有的属性       Function.prototype 是所有函数的始祖 

    不过他是 这个始祖的 原型链指向的是 万物始祖 也就是  Object.prototye

    Function.__proto__ 是个函数对象   Function.__proto__ === Object.__proto__  === Function.prototype 

    Function.__proto__.__proto__ === Function.prototype.__proto__ === Object.prototype  万物始祖

   可以说 是 Function 创造的 Object , 但 Function 原型链的原型链,原型的原型链又是指向 Object的原型。


搞清楚  Object ,Function  其他的构造对象,就很easy 了

( Number, String, Array, RegExp, Boolean ).prototype === 都各有各的特性。

( Number, String, Array, RegExp, Boolean ).__proto__  === Function.prototype  === Function.__proto__   === 等于函数始祖 

自己写的 构造函数,跟上面一样。。

function Person() {}

Person.prototype   是个对象  person : { construction: 指向构造函数本事,__proto__: 始祖对象(Object.prototype) }

Person.__proto__ 是个 函数对象   ===  Function.prototype  函数的始祖

var xiaoMing = new Person()

xiaoMing.__proto__ === Person.prototype  是个对象。


另一种对象

var xiaoHong = {}

xiaoHong.__proto__ ===  Object.prototype


看懂上面,应该就差不多哦了。。。

你可能感兴趣的:(prototype和__proto__的关系是什么)