一、面向对象
二、类的简单使用
使用class关键字来定义类,类中包含两个部分:属性+方法
class Person {
//定义类属性
name='ts';
//方法
sayhello(){
console.log('Hello,TS',"实例方法");
}
};
其中不论属性还是方法,都分为直接定义实例的和使用static开头的静态的(类的)
其中实例的需要通过对象的实例才能访问,而类的可以通过类直接访问。
class Person {
//定义类属性
//直接定义的属性是实例属性,需要通过对象的实例才能访问。
name='ts';
//使用static开头的属性是静态属性(类属性),可以通过类直接访问
static age=10;
//方法
//实例方法
sayhello(){
console.log('Hello,TS',"实例方法");
}
//静态方法
static statichello(){
console.log('Hello,TS',"类方法");
}
};
const per=new Person();
console.log(per,"实例对象");
console.log(Person,"类本身");
console.log(per.name,"实例属性");
per.sayhello();
console.log(Person.name,"实例属性",Person.age,"类属性");
Person.statichello();
输出结果如下图
当然还可以在属性前面加readonly
使属性变成只读不能编辑的:
class Person {
//定义类属性
readonly name='ts';
};
三、类的构造函数和this
以上是类的简单使用,在实际开发中这是不合理的,博主由于之前学习的java,记得类里面可以包含属性,构造函数,settergetter方法和tostring方法。当然TS也包括这些。
constructor类的构造函数,构造函数会在对象创建的时候调用,实例方法中,this表示当前实例对象,可以通过this向新建对象中添加属性。
constructor(name:string){
//实例方法中,this表示当前实例对象
//可以通过this向新建对象中添加属性
this.name=name;
}
详细代码:
class Cat{
//定义类属性
name:string;
age:number;
//constructor类的构造函数
constructor(name:string,age:number){
this.name=name;
this.age=age;
}
//setter,getter方法
setName(name:string){
this.name=name;
}
getName(){
return this.name;
}
setAge(age:number){
this.age=age;
}
getAge(){
return this.age;
}
//tostring方法
toString(){
console.log(`name:${this.name},age:${this.age}`);
}
}
let ketty=new Cat("Ketty",12);
console.log(ketty);
ketty.setAge(20);
ketty.setName("Tom");
console.log(ketty.getAge(),ketty.getName());
console.log(ketty);
ketty.toString();
四、定义类类型
(()=>{
//定义有个接口
interface IFly(){
fly()//该方法没有任何的实现
}
interface ISwin(){
swin()//该方法没有任何的实现
}
//定义一个类,这个类的类型就是上面的接口
class Person implements IFly,ISwin{
fly(){
/**xxxxxxxxxxx*/
}
swin(){
}
}
const person = new Person()
})()
五、存取器
让我们有效控制对 对象中的成员的访问,通过getters和setters来进行操作
class Person{
firstName:string
lastName:string
constructor(firstName:string,lastName:string){
this.firstName = firstName
this.lastName = lastName
}
get fullName(){
return this.firstName+'_'+this.lastName
}
set fullName(val){
let name = val.splice('_')
this.firstName = name[0]
this.lastName = name[1]
}
}