(三)Typescript中的类
程序员文章站
2022-07-03 20:54:12
...
加入QQ群:864680898,一起学习进步!点击群名可查看本人网站,有最新文章!
(三)Typescript中的类
在ECMAScript 6中,JavaScript程序将可以使用这种基于类的面向对象方法。在ts中的话,就更接近与那些成熟的语言 Java, Php
extends 类的继承关键词
class Father {
surname: string = 'deng';
shape: string = 'cool';
}
class Son extends Father{
}
let son = new Son();
console.log(son.shape) // cool
public 公有属性和方法
默认的就是公有的属性和方法,这些属性和方法可以被子类继承使用
class Father {
surname: string = 'deng';
}
class Son extends Father {
constructor(){
super();
console.log(this.surname)
}
}
let son = new Son();
private 私有属性和方法
private的属性和方法在声明的类的外部不能访问
class Father {
surname: string = 'deng';
private age: number = 23;
}
class Son extends Father {
constructor(){
super();
console.log(this.age) // Error
}
}
let son = new Son();
protected 受保护的属性和方法
protected修饰符与private修饰符的行为很相似,但有一点不同,protected成员在派生类中仍然可以访问
class Father {
surname: string = 'deng';
private age: number = 23;
protected name: string = 'mySkey';
}
class Son extends Father {
constructor() {
super();
console.log(this.name) // Ok
}
getFatherName(){
return this.name // Ok
}
}
let father = new Father();
let son = new Son();
console.log(son.getFatherName()) // Ok
//console.log(father.name) // Error
//console.log(son.name) // Error
static 静态属性
静态的属性,直接用类来访问
class Father {
static myName: string = 'mySkey';
static getAge(): number{
return 23;
}
}
console.log(Father.myName)
console.log(Father.getAge())
readonly 只读
申明的只读的属性不能再更改
class Person {
readonly name: string = 'mySkey';
}
let mySkey = new Person();
console.log(mySkey.name); // Ok
mySkey.name = '1111'; // Error
get 与 set 来截取对对象成员的访问
TypeScript支持getters/setters来截取对对象成员的访问。 它能帮助你有效的控制对对象成员的访问
// 就像女人的年龄是个秘密,只会对不喜欢的人告诉真实的
let isLike: boolean = false;
class Woman{
private _age: number = 16;
get age(): number{
return this._age;
}
set age(num: number){
if(!isLike){
this._age = num;
}else{
console.log('告诉你的也是假的!!')
}
}
}
let woman = new Woman();
woman.age = 23;
console.log(woman.age)
// 看吧,不喜欢你,所以你知道了她的真实年龄,如果把isLike改为true,那么她每天就是16了
abstract 抽象类
abstract关键字是用于定义抽象类和在抽象类内部定义抽象方法,抽象类是供其它类继承的基类。 他们一般不会直接被实例化。
abstract class Person {
abstract type: string = 'animal';
sing(){
console.log('我会唱歌!')
}
}
// let person = new Person() // Error 无法创建抽象类的实例
class Myskey extends Person {
type: string = 'animal'; // 无法继承,而且必须重写
constructor(){
super()
this.sing()
}
}
还有构造函数;还可以把类当接口使用