TypeScript中的类(class)

在JS和TS中都有类(class)这个定义,类描述了所创建的对象共同的属性和方法。

1.类中的主要模块

字段:字段是类里面声明的变量。字段表示对象的有关数据。

构造函数:类实例化时调用,可以为类的对象分配内存。

方法:方法为对象要执行的操作。

下面是TS类中的模块在JS中的转换

class Car { 
    // 字段 
    engine:string; 
 
    // 构造函数 
    constructor(engine:string) { 
        this.engine = engine 
    }  
 
    // 方法 
    disp():void { 
        console.log("发动机为 :   "+this.engine) 
    } 
}
复制代码
var Car = /** @class */ (function () {
    // 构造函数 
    function Car(engine) {
        this.engine = engine;
    }
    // 方法 
    Car.prototype.disp = function () {
        console.log("发动机为 :   " + this.engine);
    };
    return Car;
}());
复制代码

2.类的使用

我们需要使用new关键字来实例化类并使用它,具体例子如下:

class Car { 
   // 字段
   engine:string; 
   
   // 构造函数
   constructor(engine:string) { 
      this.engine = engine 
   }  
   
   // 方法
   disp():void { 
      console.log("函数中显示发动机型号  :   "+this.engine) 
   } 
} 
 
// 创建一个对象
var obj = new Car("XXSY1")
 
// 访问字段
console.log("读取发动机型号 :  "+obj.engine)  
 
// 访问方法
obj.disp()
复制代码

但是也有例外,在类中的静态方法我们可以直接调用,我们需要使用static关键字来声明静态方法和属性。

class StaticMem {  
   static num:number; 
   
   static disp():void { 
      console.log("num 值为 "+ StaticMem.num) 
   } 
} 
 
StaticMem.num = 12     // 初始化静态变量
StaticMem.disp()       // 调用静态方法
复制代码

3.类中的继承

类的继承需要使用extends关键字来实现,他会继承原先类中的所有属性和方法。

class Shape { 
   Area:number 
   
   constructor(a:number) { 
      this.Area = a 
   } 
} 
 
class Circle extends Shape { 
   disp():void { 
      console.log("圆的面积:  "+this.Area) 
   } 
}
  
var obj = new Circle(223); 
obj.disp() // 圆的面积:223
复制代码

4.类中的访问修饰符

类中的访问修饰符有三种
pulic: 公共的属性或者方法,都可以访问
protected: 受保护的属性或者方法,只有本身和子类和父类中可以访问
private: 私有的属性或者方法,只能被其定义所在的类访问。

class Encapsulate { 
   str1:string = "hello"  // 无修饰符代表public
   private str2:string = "world" 
   protected str3: number = 23
   
   _myAge(): string { // 含有私有属性的方法是可以访问的
        return 'hello' + this.str2
    }
}
 
var obj = new Encapsulate() 
console.log(obj.str1)     // 可访问 
console.log(obj.str2)   // 编译错误, str2 是私有的
console.log(obj.str3)   // 编译错误, str2 是受保护的

class Child extends Encapsulate {
    constructor() {
        super() // 继承来的必须运行super()
        console.log(this.str2)  // 编译错误, str2 是私有的
        console.log(this.str3)  // 可访问 
        console.log(this._myAge())  // 可访问 
    }
}
复制代码

5.接口和类

类可以可以使用implements来继承接口使用,但是使用接口之后类中必须含有接口中的属性和方法

interface ILoan { 
   interest:number 
} 
 
class AgriLoan implements ILoan { 
   interest:number 
   rebate:number 
   
   constructor(interest:number,rebate:number) { 
      this.interest = interest 
      this.rebate = rebate 
   } 
} 
 
var obj = new AgriLoan(10,1) 
console.log("利润为 : "+obj.interest+",抽成为 : "+obj.rebate )
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享