类实际上就是对象的模型,我们可以通过类去创建这个对象
类就是定义了这个对象长什么样子
对象实际包含了俩个部分:
- 一个是属性
- 一个是方法
TS里面的类和JS里面的类其实是大同小异的
tsconfig.json
{"compilerOptions": {"target": "ES6","module": "ES6","strict": true,"outDir": "./dist"},"include": ["./src/**/*"],"exclude": ["node_modules"],}
index.ts
//使用class关键字来定义一个类class Person{}
实际上这个类就可以使用了
//使用class关键字来定义一个类class Person{}const a = new Person()console.log(a)
定义类:
class 类名{属性名:类型}
实例属性
//使用class关键字来定义一个类/*对象中主要包含了俩个部分:一部分:属性一部分:方法*/class Person{//定义实例属性name: string = '我';//对象中有一属性,属性名叫做nameage: number = 18;//对象中有一属性,属性名叫做age}const a = new Person()console.log(a)console.log(a.name)
这就是我们定义的俩个属性
这种属性我们叫做实例属性
这个属性实际上是存放到person实例的,你只有new Person了以后才能看到这些属性,通过实例(a).属性名去访问到的属性
类属性
类属性怎么访问?
通过类直接访问
比如:
Person.age
能这么访问,这种属性就是类属性(或者说是静态属性)
怎么去定义类属性?
在属性前使用
static关键字定义类属性(静态属性)
这种属性不需要创建对象就可以直接用的属性
class Person{//定义属性name: string = '我';//对象中有一属性,属性名叫做nameage: number = 18;//对象中有一属性,属性名叫做agestatic sex:boolean = true;}const a = new Person()console.log(a)console.log(a.name)console.log(a.sex)
会报错,因为实例对象里面没有sex属性
既然是静态属性,我们要通过类去访问:
class Person{//定义属性name: string = '我';//对象中有一属性,属性名叫做nameage: number = 18;//对象中有一属性,属性名叫做agestatic sex:boolean = true}const a = new Person()console.log(a)console.log(a.name)console.log(Person.sex)
只读属性(readonly)
我们一般可以:
class Person{//定义属性name: string = '我';//对象中有一属性,属性名叫做nameage: number = 18;//对象中有一属性,属性名叫做agestatic sex:boolean = true}const a = new Person()console.log(a)console.log(a.name)a.name = "tom"console.log(a.name)
如果我们在属性前面加了readonly
这个属性就只能看不能改了
实例属性的readonly
class Person{readonly name: string = '我';}
类属性(静态属性)使用readonly
class Person{readonly sex:boolean = true}
没有特殊情况readonly一般用不上
定义方法
class Person{//定义方法sayHello(){}}
里面就可以写你的方法
直接写的就表示这是实例方法或属性
class Person{//定义方法sayHello(){console.log('hello ts');}}const a = new Person()a.sayHello();//调用方法
如果是静态方法
class Person{//定义方法static sayHello(){console.log('hello ts');}}Person.sayHello();//调用方法
