原型链看了网上的一些文章还是没看懂。。然后自己去翻了下JavaScript高级程序设计里面讲的章节,这里总结了一下,欢迎指正:
每个function都有一个原型prototype,该原型其实就是一个class,有它的构造函数,也可以定义其他成员方法,但是这里有一点不一样的是,一般在function里面赋值成员变量,不需要定义可直接使用,而在原型里是找不到该成员变量的,也就是说一个function它的prototype就是一个不包含它自己的成员变量的class而已,当然记得它的构造函数指向的是它本身。
而如果实现原型链,则是将另一个function的原型指向它要继承的function的new对象,这里可能有有点难理解,但是我接下来说的话可能会帮助你理解它:之前说过一个function的原型其实就是个变种class,子类function的原型指向了超类的function的new对象(该对象其实就是超类的class的实例),也就是说第二个function的原型里面包含了一个指向它的超类function的原型(通过new一个对象去赋值实现了将子类原型包含超类原型的指针,也就是继承),然后由于子类原型本身就有构造方法,所以现在子类的原型里面应该有的东西是:一个指向超类原型的指针,不定数个超类的成员变量(之前说过一个function的原型不包含它本身的成员变量所以既然继承后子类应该需要具有超类的成员变量),一个指向它本身的构造函数。一共是三种,这是你也可以给子类的原型增加新的成员方法,来重复跟上次一样的操作。
总结:function就是一个类似对象的东西,它的成员变量赋值在它的构造函数里,它的构造方法和成员方法定义在原型,若被继承后,其子类的构造跟它几乎一样,只是在原型多了一个指针来对应它的超类的原型,这里的继承通过赋值一个function的原型为要继承的function的new对象来实现。