一、面向对象
二、类
三、构造方法
class Dog{ name:string; age:number; //构造函数 constructor(name:string,age:number){ this.name=name; this.age=age; } bark(){ //在方法中可以通过this来表示当前调用方法的对象 //this表示当前对象 console.log(this.name); } } const dog=new Dog('旺财',3); const dog2=new Dog('小白',2); console.log(dog); console.log(dog2); dog.bark();
四、继承
五、super关键字
(function(){ class Animal{ name:String; constructor(name:string){ this.name=name } say(){ console.log('动物在叫') } } class Dog extends Animal{ //如果在子类写了构造函数,在子类的构造函数中必须对父类的构造函数进行声明 // age:number; constructor(name:string,age:number){ super(name); this.age=age; } say(){ //在类的方法中super就表示当前类的父类 super.say(); } } const dog=new Dog('旺财',3); dog.say(); })();
六、抽象类
(function(){ // 以abstract开头的都是抽象类 //抽象类和其他类的区别不大 只是不能用来创建对象 // 抽象类就是专门用来被继承的类 //抽象类中可以添加抽象方法 abstract class Animal{ name:String; constructor(name:string){ this.name=name } //定义一个抽象方法 // 抽象方法使用abstract开头,没有方法体 //抽象方法只能定义在抽象类中,子类必须对抽象方法进行重写 abstract say():void; } class Dog extends Animal{ say(){ console.log('汪汪汪'); } } const dog=new Dog('旺财'); dog.say(); })();
七、接口
(function(){ //描述一个类型的对象 type myType={ name:String, age:number }; //接口用来定义个类结构,用来定义一个类中应该包含哪些属性和方法 //同时接口也可以当成类型声明去使用 interface myInterface{ name:string; age:number; } // interface myInterface{ // gender:string; // } // const obj:myInterface={ // name:'sss', // age:111, // gender:'男' // }; })();
八、属性的封装
(function(){ //定义一个表示人的类 /* TS可以在属性前添加属性的修饰符 public 修饰的属性可以在任意位置访问(修改)默认值 private 私有属性 私有属性只能在类内部进行访问(修改), 通过在类中添加方法使得私有属性可以被外部访问 protected 受保护的属性只能在当前类和当前类的子类进行访问 */ class Person{ private name:string; private age:number; constructor(name:string,age:number){ this.name=name; this.age=age; } /* getter方法用来读取属性 setter方法用来设置属性 */ //定义方法 用来获取name属性 getName(){ return this.name; } //定义方法 用来设置name属性 setName(value:string){ this.name=value } } /* 现在属性是在对象中设置的,属性可以任意的被修改 属性可以任意被修改将会导致对象中的数据变得非常不安全 */ const p=new Person('cai',18); p.setName('lily'); console.log(p.getName()) })();