Javascript原型链

原型链的继承就是将子类的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.prototype

childInstance.__proto__ == childClass.prototype

childInstance.__proto__.__proto__ == childClass.prototype.__proto__ == parantClass.prototype

对于这里的childInstance.__proto__ == childClass.prototype,是由关键字new实现的,具体可以看我的另外一篇文章new到底做了什么

参考文献
Javascript继承机制的设计思想
Javascript面向对象编程(二):构造函数的继承
继承与原型链

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值