首页 > 编程 > JavaScript > 正文

Javascript原型链

2019-11-07 23:12:50
字体:
来源:转载
供稿:网友

原型链的继承就是将子类的PRototype.__proto__链接到父类的prototype,借此完成原型链

child.prototype.__proto__.= parent.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面向对象编程(二):构造函数的继承 继承与原型链


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表