TypeScript类的概念和使用

类的基本使用

定义一个最简单的Lady类,这里要使用关键字class,类里边有姓名属性和一个得到姓名的方法,代码如下:

class Lady {
    
    
  content = "Hi,帅哥";
  sayHello() {
    
    
    return this.content;
  }
}

const goddess = new Lady();
console.log(goddess.sayHello());

写完代码后,可以使用ts-node xxx.ts来查看一下结果。

这是一个最简单的类了,如果你有些编程经验,对这个一定很熟悉,工作中几乎每天都会用到。

类的集成

这里提前说一下 TypeScrip 的继承和ES6中的继承是一样的。关键字也是extends,比如我们这里新建一个XiaoJieJie的类,然后继承自Lady类,在XiaoJieJie类里写一个新的方法,叫做sayLove,具体代码如下。

class Lady {
    
    
  content = "Hi,帅哥";
  sayHello() {
    
    
    return this.content;
  }
}
class XiaoJieJie extends Lady {
    
    
  sayLove() {
    
    
    return "I love you";
  }
}

const goddess = new XiaoJieJie();
console.log(goddess.sayHello());
console.log(goddess.sayLove());

类写好以后,我们声明的对象是XiaoJieJie这个类,我们同时执行sayHello()和sayLove()都是可以执行到的,这说明继承起作用了。

类的重写

讲了继承,那就必须继续讲讲重写,重写就是子类可以重新编写父类里边的代码。现在我们在XiaoJieJie这个类里重写父类的sayHello()方法,比如现在我们觉的叫的不够亲切,我们改成下面这个样子。

class XiaoJieJie extends Lady {
    
    
  sayLove() {
    
    
    return "I love you!";
  }
  sayHello() {
    
    
    return "Hi , honey!";
  }
}

然后我们再次运行ts-node xxx.ts来查看结果。

super关键字的使用

super关键字的使用,比如我们还是想使用Lady类中说的话,但是在后面,加上你好两个字就可以了。这时候就可以使用super关键字,它代表父类中的方法。那我们的代码就可以写成这个样子了。

class XiaoJieJie extends Lady {
    
    
  sayLove() {
    
    
    return "I love you!";
  }
  sayHello() {
    
    
    return super.sayHello() + "。你好!";
  }
}

TypeScript 中类的访问类型

其实类的访问类型就是基于三个关键词private、protected和public,也是三种访问类型。

先写一个简单的类

我们定义一个 Person 类,然后使用这个类的对象,进行赋值,最后打印在控制台上。具体代码如下:

class Person {
    
    
    name: string;
  }
  
  const person = new Person();
  person.name = "Riven";
  
  console.log(person.name);

写完后我们直接可以在Terminal(中),输入ts-node demo11.ts进行查看结果,结果会打印出Riven。

public访问属性讲解

这时候可以打出Riven是因为我们如果不在类里对name的访问属性进行定义,那么它就会默认是public访问属性。

这就相当于下面的这段代码:

class Person {
    
    
    public name:string;
}

public从英文字面的解释就是公共的或者说是公众的,在程序里的意思就是允许在类的内部和外部被调用.

比如我们在类内调用,我们在写一个sayHello的方法,代码如下:

class Person {
    
    
    public name:string;
    public sayHello(){
    
    
        console.log(this.name + ' say Hello')
    }
}

这时的this.name就是类的内部调用。我们在下面在执行一下这个方法person.sayHello(),终端中可以看到一切正常运行了,顺利打印出了Riven say Hello这句话。

在类的外部调用,我们就可以很简单的看出来了,比如下面的代码,从注释横线下,全部是类的外部。

class Person {
    
    
    public name:string;
    public sayHello(){
    
    
        console.log(this.name + 'say Hello')
    }
}
//-------以下属于类的外部--------
const person = new Person()
person.name = 'Riven'
person.sayHello()
console.log(person.name)

private访问属性讲解

private 访问属性的意思是,只允许再类的内部被调用,外部不允许调用

比如现在我们把 name 属性改成private,这时候在类的内部使用不会提示错误,而外部使用VSCode直接会报错。

class Person {
    
    
    private name:string;
    public sayHello(){
    
    
        console.log(this.name + 'say Hello')  //此处不报错
    }
}
//-------以下属于类的外部--------
const person = new Person()
person.name = 'Riven'    //此处报错
person.sayHello()
console.log(person.name)  //此处报错

protected 访问属性讲解

protected 允许在类内及继承的子类中使用

做一个例子,把name的访问属性换成protected,这时候外部调用name的代码会报错,内部的不会报错,和private一样。这时候我们再写一个Teacher类,继承于Person,代码如下:

class Person {
    
    
    protected name:string;
    public sayHello(){
    
    
        console.log(this.name + 'say Hello')  //此处不报错
    }
}

class Teacher extends Person{
    
    
    public sayBye(){
    
    
        this.name;
    }
}

这时候在子类中使用this.name是不报错的。

猜你喜欢

转载自blog.csdn.net/yang939207690/article/details/109115611