(学这个的时候我很困...惑,觉得回到了之前学数学的时候,心碎,经过"老师"的指导,再看看其他牛牛写的博客,自己慢慢也能理解,一定多看多写,尤其像我这么笨的。)理解原型之前需要了解一下什么是构造函数,看个例子:
构造函数:
function Car(){}
var person = new Car()
Car这个函数new了一个对象,也就是person。Car就是构造函数。因为它构造了person这个对象。
可以这样说,一个函数加new构造了一个对象,这个就是构造函数,其实可以从字面意思来理解。
函数对象:
函数其实也是一个对象,称为函数对象。
原型:
function Person(name){}
var People = new One()
Person.prototype.name = 'god'
console.log(People.name)
看上面例子,每个函数内部都有一个函数原型prototype属性,构造函数new一个新的对象People的时候,这个People在寻找name属性的时候找到了Person的prototype的name。我们可以先把prototype理解为仓库,库里面存放一些方法等。这个函数内部的prototype就是原型。上图大多数用的person,我也用这个吧。好记。

原型链:
如果People在寻找这个name属性的时候在Person没有找到就会向上一级找,上一级也就是找没有就再向上,这个就叫链。
constructor:
现在来看一下constructor,中文意思为构造器。那么它构造了谁呢?看图吧!

还是上面的god那个例子,说白了就是Person创造了Person.prototype。这个时候应该上这个图了。

灵魂画手哈哈
还是说这个链哈,向上找,上面就是Object。Object其实也有自己的__proto__属性。只不过是Null。Object也有自己的构造器(Object),也有原型对象(Object.prototype),也有Object.proto(Null),Object()就是构造函数,也就是构造器。图图图图。。。
Object.prototype.__proto__ === null

Number.__proto__ === Function.prototype // true
Number.constructor == Function //true
Boolean.__proto__ === Function.prototype // true
Boolean.constructor == Function //true
String.__proto__ === Function.prototype // true
String.constructor == Function //true
Object.__proto__ === Function.prototype // true
Object.constructor == Function // true
Function.__proto__ === Function.prototype // true
Function.constructor == Function //true
Array.__proto__ === Function.prototype // true
Array.constructor == Function //true
RegExp.__proto__ === Function.prototype // true
RegExp.constructor == Function //true
Error.__proto__ === Function.prototype // true
Error.constructor == Function //true
Date.__proto__ === Function.prototype // true
Date.constructor == Function //true
这些可以当题目做。
重点记住这些
所有函数对象的__proto__都=== Function.prototype
所有函数(构造器)都是Function创造的(包括自己及Object),可以把Function当做"函数之母", 记住是大写的F。
所有构造器都继承了Function.prototype的方法和属性
每个函数都有一个原型对象prototype
函数本身也可以作为一个对象
总结的不好,上个图

原型链图

有的图是别人那的,侵删,写这个是自己平时不会的时候看的,如果不对,不好,也请指出,共勉。