本文转载自微信公众号《JS日报》,作者慧慧。转载本文请联系JS每日一问公众号。1、什么是类(Class)是面向对象程序设计(OOP,Object-OrientedProgramming)实现信息封装的基础类?它是一种用户定义的引用数据类型,也称为类类型。传统的面向对象语言基本都是以类为基础的,而JavaScript的基于原型的方式让开发者理解的多了很多。在ES6之后,JavaScript有了class关键字。虽然本质还是构造器,使用起来方便很多,但是JavaScript的类还是有一些特点的。不加,比如修饰符和抽象类TypeScript的类支持所有面向对象的特性,比如类,接口等。2.定义类的关键字是class,后面是类名。一个类可以包含以下模块(类的数据成员):“字段”:字段是在类中声明的变量。字段表示有关对象的数据。“构造函数”:类实例化时调用,可以为类的对象分配内存。"Method":方法是对象要执行的操作如下:void{console.log("Theengineis:"+this.engine)}}继承类的继承使用了关键字extendsclassAnimal{move(distanceInMeters:number=0){console.log(`Animalmoved${distanceInMeters}m.`);}}classDogextendsAnimal{bark(){console.log('Woof!Woof!');}}constdog=newDog();dog.bark();dog.move(10);dog.bark();Dog是一个派生类,它派生自Animal基类。派生类通常称为子类,基类通常称为超类。Dog类继承了Animal类,所以实例dog也可以使用Animal类的move方法。同样,类被继承后,子类可以重新定义父类的方法。这个过程称为方法重写。super关键字是对父类的直接引用。该关键字可以引用父类的属性和方法,如下:void{super.doPrint()//调用父类的函数console.log("子类的doPrint()方法。")}}修饰符可以看到,上面的形式和ES6很像,typescript在此基础上增加了三个修饰符:publicpublic:类程序中定义的成员可以自由访问privateprivate:只能在内部访问该类的protected:除了在本类内部可以访问外,在子类中仍然可以访问,private修饰符只能在本类内部访问,不能访问实例对象,继承本类的子类也不能访问,如下图所示:protected修饰符与private修饰符非常相似,实例对象不能访问protected属性,如下:一个区别是protected成员在子类中仍然可以访问除了以上修饰符,还有只读的“修饰符”,只读修饰符是通过readonly关键字声明的,只读属性必须在声明的时候或者在const中初始化ructor,如下:除了实例属性,还有静态属性Staticattributes这些属性存在于类本身,而不是类的实例上。它们是通过静态定义的,访问这些属性需要通过类型来访问。这种形式的静态属性访问方式如下:classSquare{staticwidth='100px'}console.log(Square.width)//100px可以发现上面类的一个特点就是它们都可以被实例化。在typescript中,还有一个抽象类abstractclass抽象类作为其他派生类的基类,它们一般不直接实例化。与接口不同,抽象类可以包含成员的实现细节。abstract关键字用于定义抽象类,在抽象类内部定义抽象方法,如下:abstractclassAnimal{abstractmakeSound():void;move():void{console.log('roamingtheearch...');}}这种类的不能实例化,通常我们需要创建一个子类来继承,如下:()//roamingtheearch...3.应用场景除了利用类的特性完成日常业务代码外,还可以利用类(class)作为接口,尤其是在React项目中,如下:导出默认classCarouselextendsReact.Component因为组件需要传入props类型的Props,而且需要设置默认的props,即defaultProps,这时候用class作为接口先声明一个class比较合适,其中包含组件props所需的类型和初始值://propsoftypeexportdefaultclassProps{publicchildren:Array
