什么是原型
原型也就是指你是从谁那继承的。比如:一个东西是从一个模板里面刻出来的,模板就是原型,而你,就是通过模板刻出来的,可以有很多个一样的你。
规定一下模板的属性啊,接着看。规定,函数这个模板有两个属性: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
![](https://i-blog.csdnimg.cn/blog_migrate/d9ce03c57c5d103e90da1cc90d06de66.webp?x-image-process=image/format,png)
如图,A.prototype
就是指的是function
这个对象,而constructor
就是指向自己本身
那么
function
的模板呢,当然就是Object
啦,所以A.prototype._proto_
就等价于function._proto_
,具体的function
的模板就是Object
而最高的对象的模板呢,没了,就是null
,我想你们应该都明白了吧。看到好多人用图,其实让大家思考的时候大家就按自己的想法走了,不一定都能想象的来。
所以下面这幅图你们懂了吧?
![](https://i-blog.csdnimg.cn/blog_migrate/d8213febabf7cf5377c5b9640b1b9d5d.webp?x-image-process=image/format,png)
不懂了就继续看上面的分析。
作者:stevemoon
链接:http://www.jianshu.com/p/5b3193be9bee
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。