其实 js 原型跟原型链没有啥可讲的

947 阅读2分钟
原文链接: www.jianshu.com

什么是原型
原型也就是指你是从谁那继承的。比如:一个东西是从一个模板里面刻出来的,模板就是原型,而你,就是通过模板刻出来的,可以有很多个一样的你。
规定一下模板的属性啊,接着看。规定,函数这个模板有两个属性:prototype_proto_,而其他对象这个模板只有_proto_这个属性(对比可知,函数也是对象哦)。
举个简单例子:

对象a._proto_ === 对象a.constructor.prototype( 原型 )
这里的 constructor 就是原型的一个属性,也就是模板的一个属性,模板的属性constructor指的是对象a,
那么对象a再用prototype不就又指向对象a的原型了吗?也就是指向模板。

所以个人总结了一下,原型链就是很简单的东西。

a = new A();

a的原型(模板)就是A这个构造函数,a是通过A刻出来的,a的爸爸(或者妈妈)就是A
A的爸爸(或者妈妈)又是谁呢?A是一个构造函数,那么函数是一个对象,是一个具体的对象,那它的爸爸妈妈就是一个抽象的对象 也就是Object
Object的爸爸妈妈是谁呢,没了,他自己已经到头了,所以它的原型就是null

再举一个例子:

var A = function(){};
var a = new A();

a._proto_ 就是 实例化之前的A ,模板就是function,也就是A.prototype


Paste_Image.png


如图,A.prototype就是指的是function这个对象,而constructor就是指向自己本身

那么 function的模板呢,当然就是Object啦,所以A.prototype._proto_就等价于 function._proto_,具体的function的模板就是Object
而最高的对象的模板呢,没了,就是null,我想你们应该都明白了吧。看到好多人用图,其实让大家思考的时候大家就按自己的想法走了,不一定都能想象的来。

所以下面这幅图你们懂了吧?


Paste_Image.png

不懂了就继续看上面的分析。