JavaScript中的原型链是一个非常有魔力的东西
在javascript中,实例对象与原型之间的链接,叫做原型链。其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。然后层层递进,就构成了实例与原型的链条,这就是所谓原型链的基本概念。[1]
Javascript
首先先记住几个概念:
再理解一下prototype与__proto__
上面的概念中提到了构造函数,那么什么是构造函数呐?
在 JavaScript 中,用 new 关键字来调用的函数,称为构造函数。构造函数首字母一般大写[2]
先看一个例子:
在 JavaScript 的内置对象(比如:Object、Array)中,都是 Function 构造函数的实例
规定 __proto__ 与prototype的属性包括 __proto__ 和 constructor 两个
在浏览器下的运行情况可以看到
实际情况
在上面的例子中person对象是 Person 构造函数的一个实例,那根据规定,下面的关系一定成立
即person的构造函数是Person这个结论是正确的
在其中的概念可以看到__proto__中有__proto__,那么是不是就可以无限访问下去呐?那就会产生一个疑问,__proto__到最后是个啥?
通过上面的问题,自然就引入了“原型链”的概念,在这一条__proto__的链路上,最终所有都指向了Object
为了在整体上有一个清晰的概念,我做了一幅图
一图看懂原型链
小伙伴们可以仔细推敲一下这个图,是不是脑袋里清晰多啦,JavaScript皆对象!
知道了原型链,但还不知道原型链到底有什么用对吧?搞这么复杂,到底有啥用?
有用!一开始的描述当中,又看到“继承”这个关键词,对于熟悉了面向对象的小伙伴,没什么理解难度,入门小伙伴可以理解为“子承父业,青出于蓝而胜于蓝”