原型与原型链

301 阅读2分钟
(学这个的时候我很困...惑,觉得回到了之前学数学的时候,心碎,经过"老师"的指导,再看看其他牛牛写的博客,自己慢慢也能理解,一定多看多写,尤其像我这么笨的。)理解原型之前需要了解一下什么是构造函数,看个例子:

构造函数:

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
函数本身也可以作为一个对象

总结的不好,上个图

原型链图

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