class的继承:

前置内容

    class Point {
     constructor(x, y) {
      this.x = x
      this.y = y
     }
     toString() {
        return `(${this.x},${this.y})`
     }
     /* 静态方法 */
     static hello() {
        console.log("hello world!")
     }
    }

    // 子类实例的构建,基于父类实例
    // super 方法调用父类的实例。使用了super后,才能用this
    class ColorPoint extends Point {
     constructor(x, y, color) {
      super(x, y) // super作为方法,用在子类的构造,必须在this之前先调用
      this.color = color
     }
     toString() {
      //  super作为对象(对象调用方法),指向的是父类的原型对象即Point.prototype
      console.log(Point.prototype.toString === super.toString) // true
      return `color: ${this.color}, ${super.toString()}`
     }
    }
  1. 子类和父类是通过什么关键字实现继承?父类是Point,子类是ColorPoint如何写?

    通过extends关键字

    class ColorPoint extends Point{
     
    }
  2. 子类的属性和方法中,哪个关键字是必须的?这个关键字怎么用?为什么要这么用?

    super关键字必须。

    super关键字有两种用法,作为方法和作为对象。

    作为方法时,用在constructor方法中(用于子类的构造),必须在this之前调用。

    作为对象时,用在其他方法中,调用父类的方法用。指向的是父类的原型对象。

    Point.prototype.toString === super.toString // true
    /*
    super作为对象时,不能不调用方法,直接拿来用,比如  Point.prototype === super 就会控制台报错
    */
  3. ColorPoint.hello()会输出什么?为什么?

    会输出 hello world! 因为ColorPointPoint的子类,会继承它的所有方法。hello()Point的静态方法,也会被子类ColorPoint继承。

  4. 如何从子类获取父类?代码演示

    Object.getPrototypeOf(ColorPoint) === Point   //true

    Object.getPrototypeOf(childClass) 的方法可以判断一个类是否继承了另一个类

  5. 简述一下super的两种使用场景

    super可作为方法,也可作为 对象

    方法:子类的constructor中使用。

    对象:在子类的其他方法中使用。普通方法 = > 指向父类原型对象(父类的方法全部定义在原型对象上); 静态方法 => 指向父类

  6. 子类的__proto__属性,指向的是什么?

    子类的__proto__属性指向父类

    colorPoint.__proto__ === Point // true
    // 构造函数的继承
  7. 子类的prototype属性的__proto__属性指向什么?

    子类的prototype属性的__proto__属性指向父类的prototype属性

    colorPoint.prototype.__proto__ === Point.prototype  // true
    // 类的方法的继承
  8. 原生构造函数有哪些?简述下Boolean构造函数的用法.
    Boolean Number String Array Date Function Regexp Error Object

    Boolean()  
    Boolean 对象是一个布尔值的对象包装器。当需要判断一个对象是正负时,可以这么做
    将非布尔值转化为布尔值,用Boolean方法,Boolean(exp) 或者 !!(exp)
  9. ES5的方法实现继承,可以继承到原生的构造函数吗?为什么?

    ES5是先新建子类的实例对象this,再将父类的属性添加到子类上。由于父类的内部属性无法获取,导致无法继承原生的构造 函数。

  10. ES6的方法实现继承,可以继承到原生的构造函数吗?为什么?

    ES6 是先新建父类的实例对象this,然后再用子类的构造函数修饰 this,使得父类的所有行为都可以继承。


joychenke
47 声望3 粉丝

业精于勤荒于嬉。加油ヾ(◍°∇°◍)ノ゙