• 关于组合式继承和寄生式继承的个人理解


    ---恢复内容开始---

      这是我第一次在博客园认真写博客,也是第一次认真写技术博客,发表下个人见解,望大家不吝赐教!

      首先介绍下js的继承。很多OO语言,如C#,都支持接口继承和实现继承。但是由于在js中,函数是没有签名的(没有签名也导致了js中没有重载的概念。原因简单的说,就是函数的签名是存在一个数组Argument中的),所以js只支持实现继承。而js的继承主要依靠原型链(ps:摘抄《Javascript高级程序设计》)

      简单说下原型链。原型链的实现方式,在于把对象a 的prototype属性指向一个对象b。这样,a对象就继承了b对象。

    换句话说,a对象是b对象的子类。如果b对象的prototype又指向一个对象c,那么a、b、c、Object这些实例和原型组成的链条,就是原型链。所有对象的终极父类,又叫超类,都是Object。简单代码如下:

     1   function A() {
     2             this.a = "a";
     3         }
     4         A.prototype = new B();           //这里要注意,这是new B(),不是B
     5         A.prototype.constructor = A;      //如果这里不指定,这里将指向超类。因为继承重写了constructor属性
     6         function B() {
     7             this.b = "b";
     8         }
     9         
    10         var instance = new A();
    View Code

    用Chrome跟踪,可以看到这样的关系,如下图:

    从图中,我们可以看到,A的prototype属性已经指向了B对象的实例,B对象中又有b成员。constructor因为经过重新指向了A,所以这里看到的constructor是A。这个属性是指向构造函数的。这个时候,A对象就继承了B对象的所有属性。而在B对象中,我们又可以看到这样属性等。这里,B对象的prototype指向的Object。也就是说B对象的父类,是Object。

  • 相关阅读:
    关于高精度的那些事 ~
    LOJ #10002. 喷水装置
    [HAOI2008]糖果传递
    题解 CF1404B 【Tree Tag】
    题解 CF1407E 【Egor in the Republic of Dagestan】
    唯美歌词
    CF做题总结
    CSP2020游记
    数论
    hash好题
  • 原文地址:https://www.cnblogs.com/drafire/p/5389098.html
Copyright © 2020-2023  润新知