Class 简单使用摘要

参考

class 基本语法

//class 实现
class Point {
  constructor (x,y) {
    this.x = x;
    this.y = y;
  }

  toString() {
    return (this.x,this.y)
  }
}

//z构造函数实现
function Points(x,y) {
  this.x = x;
  this.y = y;
}

Points.prototype.toString = function(){
  return this.x+this.b
}

constructor

  • 默认方法,未显示定义时会默认添加
  • 默认返回实例对象 this
  • 必须使用 new 调用
  • static 静态方法

    类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。
    静态方法可以被子类继承。

class Foo {
  static classMethod() {
    return 'hello';
  }
}

Foo.classMethod() // 'hello'

var foo = new Foo();
foo.classMethod()
// TypeError: foo.classMethod is not a function

继承 extends

在子类的构造函数中,只有调用super之后,才可以使用this关键字,否则会报错。这是因为子类实例的构建,是基于对父类实例加工,只有super方法才能返回父类实例。

class Point {
}

class ColorPoint extends Point {
}

class ColorPoint extends Point {
  constructor(x, y, color) {
    super(x, y); // 调用父类的constructor(x, y)
    this.color = color;
  }

  toString() {
    return this.color + ' ' + super.toString(); // 调用父类的toString()
  }
}

super

  • 函数 super()
    作为函数使用,代表父类的构造函数;
    子类的构造函数必须执行一次 super();
class A {
  constructor() {
    console.log(new.target.name);
  }
}
class B extends A {
  constructor() {
    super();
  }
}
new A() // A
new B() // B

super虽然代表了父类A的构造函数,但是返回的是子类B的实例,即super内部的this指的是B

  • 对象 super
    在普通方法中 指向父类的原型对象
    在静态方法中 指向 父类
    原文作者:YjWorld
    原文地址: https://www.jianshu.com/p/a7503197751e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞