原型链的继承就是将子类的PRototype.__proto__
链接到父类的prototype
,借此完成原型链
实例化的对象没有prototype
,prototype
是函数特有的属性,所有的对象都有__proto__
, 这是指向实例化这个对象的类的prototype
,所有对象的原型链最后是null
下面是经典的原型链继承的例子,我借此解释一下
function extend(Child, Parent) { var F = function(){}; //将父类的prototype复制到F函数中 F.prototype = Parent.prototype; /*new F()实例化F()实际的作用是生成了一个下面这个对象 { __proto__: { //Parent.prototype } } 这样就完成了 Child.prototype.__proto__ = Parent.prototype这个原型链继承的核心内容 */ Child.prototype = new F(); //Parent.prototype的constructor是Parent,为了准确这里要手动将Child.prototype.constructor改为Child Child.prototype.constructor = Child; //这里是为了代码实际开发时方便调用父类,不用使用__proto__ Child.uber = Parent.prototype; }涉及到继承这一块,javascript 只有一种结构,那就是:对象。在 Javascript 中,每个对象都有一个指向它的原型(prototype)对象的内部链接。这个原型对象又有自己的原型,直到某个对象的原型为 null 为止(也就是不再有原型指向),组成这条链的最后一环。这种一级一级的链结构就称为原型链(prototype chain)。—MDN原型链描述
上面这句话有些长,看代码获取会直观一点
childClass.prototype.__proto__ == parantClass.prototypechildInstance.__proto__ == childClass.prototypechildInstance.__proto__.__proto__ == childClass.prototype.__proto__ == parantClass.prototype对于这里的childInstance.__proto__ == childClass.prototype
,是由关键字new
实现的,具体可以看我的另外一篇文章new到底做了什么
参考文献 Javascript继承机制的设计思想 Javascript面向对象编程(二):构造函数的继承 继承与原型链
新闻热点
疑难解答