Javascript原型理解
Javascript原型理解
本篇只是个人对于javascript原型的理解,可能与实际的原理有一些偏差,个人认为javascript对类的实现其实核心是如何通过对象模拟类这个概念具有的功能。
创建类
javascript创建类,就是需要创建一个Object有着特定的键值对,因此我们需要一个函数和一个空的Object作为基础,这个函数一般被称为构造函数。
1 | var A = function(){ |
我们需要考虑javascript是如何执行以上过程的,当我们调用 new A()
时,首先创建一个a = {}
,之后使用类似A.apply(a)
,完成初始化。
继承类
通过以上的想法可以生成一个类实例,但是这并不足以完成类所应该完成的功能,接下来我们思考继承的实现。 继承需要用到键 __proto__
,继承本质在于子类具有父类的功能,则键 __proto__
需要指向父类,在javascript中即指向一个Object。在 new
操作中并不仅仅只进行了简单的初始化,还为 a
赋予了一个新键 __proto__
,使其指向父对象。那么父对象在哪?父对象保存在 A.prototype
的中。这两个键容易使我们迷惑,但是我们其实只需要知道继承链是通过 __proto__
实现的就足够了。子类没有的键会查找 a.__proto__
引用的对象里是否存在,没有则再查找 a.__proto__.__proto__
里键是否存在,从而构成一个继承链,直到为null
。
1 | a.__proto__ === A.prototype; // 返回true |