美文网首页前端开发那些事儿
ES6中的类(class)和继承

ES6中的类(class)和继承

作者: 深度剖析JavaScript | 来源:发表于2020-09-03 15:35 被阅读0次

提起面向对象编程,任何语言都必然会提及类和继承,js也是一样,但在悠悠长长的发展过程中,js一直是使用函数来模拟实现类的,跟其他语言对比,可读性就会差很多。比如java,java里面有专门的关键字class来声明一个类,js没有;java有entends继承一个类,js没有;java有静态关键字static声明自己私有的东西子类不能用的等等,js也没有;一直到ES6出现,才开启了class及相关关键字的使用。让js的类使用起来更像其他语言的类,可读性更高。

class Person {
    constructor(name) {
        this.name = name;
    }
    show() {
        console.log(this.name);
    }
    static fn() {
        console.log("私有方法fn")
    }
}
let p = new Person('alice');
typeof(Person)//function
Person.fn();//私有方法fn
console.log(p.name);//alice
p.show();//alice
p.fn();//Uncaught TypeError: p.fn is not a function

由于就是一些语法规则,比较简单,这里小记几点即可:
1. ES6 的类,完全可以看作构造函数的另一种写法,就是一个语法糖;本质还是一个function
2. 构造函数的prototype属性,在 ES6 的“类”上面继续存在。即:ES6类上的所有方法(除了用static定义的)都定义在类的prototype属性上面
3. 使用static定义的属于属性或者方法叫静态属性和静态方法,只能通过类名调用,不会被子类继承
4. 由于实例方法都是定义在构造函数prototype中,所以使用Object.assign()可以方便的向一个类中添加多个方法

class A{
  constructor(){ }
}
Object.assign(A.prototype, {
  xx(){},
  xxx(){}
});

5. 通过new生成对象时,自动调用constructor方法,如果没有显式定义该方法,系统会隐式的添加一个空的constructor方法;子类构造函数必须加上super()执行父类的构造constructor函数
6. 在“类”的内部可以使用get和set关键字,在读取或者设置该属性时可以拦截到,其实这点es5也是一样
7. 除了class 类名{}的声明方式,还可以使用表达式的形式: const A= class{...},但比较少用
8. class内部默认是严格模式,且class声明的变量不会有预编译变量提升的东西
9. 使用entends实现继承,格式:

class A {}

class B extends A {
  constructor() {
    super();
  }
}

相关文章

  • JS中类的继承封装和多态

    子类继承父类的属性和方法(原生继承,call继承,寄生组合继承,ES6中class类继承)原生继承:让子类的原型指...

  • react组件

    es6 的class类的继承 运用es6 class继承 通过继承React.Component类来定义一个组件

  • [JavaScript] class

    ES6中的class基于原型继承创建类。 (1)class只是原型继承的语法糖 相当于: 注: class定义中...

  • ES6

    ES6是一个语言标准,不是一个框架。 ES6中的class与继承 class是创建类对象与实现类继承的语法糖,旨在...

  • ES6中类与类的继承

    ES6以前,javascript中类的继承可以使用function和原型prototype来模拟类class来实现...

  • ES6中的类(class)和继承

    提起面向对象编程,任何语言都必然会提及类和继承,js也是一样,但在悠悠长长的发展过程中,js一直是使用函数来模拟实...

  • ES6-class、extends、super

    ES6中 有了Class(类的概念),这使得原型、构造函数,继承等显得更加简单

  • class继承

    class继承是从ES6开始正式被引入到JavaScript中。class的目的就是让定义类更简单。 用函数实现 ...

  • ES6新特性

    ES6新特性 1.类(支持继承 extends)class TestClass { constructor(...

  • class 的继承

    ES6 中 class 的继承用关键字 extends 声明: 现在实例 c 既有自己的方法也继承了父类 Shap...

网友评论

    本文标题:ES6中的类(class)和继承

    本文链接:https://www.haomeiwen.com/subject/fkansktx.html