上面两章介绍了一些es6的方法和循环的差异,前端的同学肯定对类,泛型,接口,有些陌生。

口上说出这些话的人,一般都是后台,当然也有前端童鞋知道。以我个人学习的以及个人的思考分享给大家。

 

啥是类?

想想这个一个场景,当我们使用面对对象的方式来构建一个项目,写在一个文件中,但是这个项目很大,设计的模块也比较多。

这个时候,就需要一个顶级的对象,下面有三个二级对象,6个三级对象,呈现金字塔的形状,这个时候,三级对象想访问顶部对象咋办?只能继承呗?

但是在js(以前)中是没有继承的概念的,当然你也可以手动实现一个。是不是又多了一个文件?而且如果有多级对象,我想知道它是不是属于谁下的对象?

遇到的问题很多,只能是一个项目一个对象的设计,不可复用,一些相似的场景下是可以的。但是远远没有到解决问题的程度。

 

class 类的概念就是为了解决这个问题的。如果对类还没有概念,把他想想成一个原型链!

类的构成:类分为两个部分,类的内部,类的外部

class Person{
  //这是内部
  name;
  eat();

  //这里设置属性,是否可以被外部访问 
       constructor(){
        console.log('hah')
    }
}
//类的外部

类的属性有哪些?又称为控制符

public:设置内部和外部都可以访问。
private:私有的,只有类的内部才可以访问。
protected:受保护的,类的内部和子类可以访问,其他无法访问。
constructor:类的构造函数,当类被实例化的时候被调用一次,调用的是new 一次,也只会new一次。
extends:继承另一个类,继承父类的所有属性和方法。
    //这个时候有个场景,想把父类中的name传入给子类,使用super(name),这样就传过去了,如果子类想访问父类,很简单,父类.方法。
泛型:参数化的类型,一般用来限制集合的内容。
    //举个栗子,var workers:Array<Person>=[];
    //给参数workers指定是数组类型,指定是Person,默认值是数组。
    //使用该参数,放进去的数组只能是属于Person的(子类也可以),不属于Person的类就会报错

接口:用来建立某种代码约定,使得其他开发者在调用某个方法或者创建一个新的类的时候必须遵循接口所定义的代码约定

 readonly:可以声明该属性是只读的

 static:静态属性 我们也可以创建类的静态成员,这些属性存在于类本身上面而不是类的实例上。

 类型断言:我知道这个值的类型是什么,那么我就给他设置一个限制,例如

  let someValue: any = "this is a string";

  //我知道strLength的值为number但是,someValue为字符串,就可以这么判断

  //let strLength: number = (<string>someValue).length;

  //另一种语法:as

                

  //let strLength: number = (someValue as string).length;

enum

  enum Color {Red = 1, Green, Blue}

   let colorName: string = Color[2];

   alert(colorName); // 显示'Green'因为上面代码里它的值是2