在本教程中,我们将学习Typecript编程语言中的类和对象的基本知识。
在任何面向对象的编程中,面向对象编程的基本要素是类和对象。数据存储在类中,而对其进行操作的行为或方法则由方法表示。
类型脚本类
Class 是在最新的JavaScript的ES6 版本中引入的。同样的类也是用Typescript实现的。类作为新创建对象的模型或模板。
一个类被用来创建同类的对象。它意味着每个对象都包含独特的数据,然后在方法中使用这些数据来实现类的行为。
一个类包含以下内容
- 属性或成员变量
- 构造函数
- 方法
带成员的类声明示例
该类可以使用关键字class 来创建。
它包含
- 属性/变量/成员来保存数据。
- 方法是对数据进行的操作,这些方法可以是一般的方法,也可以是设置器和获取器。
- 和用于初始化对象数据的构造函数。
下面是类声明的Typescript代码
class Employee {
name: string;
constructor(name: string) {
this.name = name;
}
getName() {
return name;
}
}
生成的JavaScript代码是
var Employee = /** @class */ (function () {
function Employee(name) {
this.name = name;
}
Employee.prototype.getName = function () {
return name;
};
return Employee;
}());
在上面的例子中,创建了雇员类。它有一个名字作为属性变量名,并提供了构造函数,使用getter返回名字对象。
对象创建示例
每个类都有几个对象可以被创建。
每个对象都有独特的属性数据,通过方法进行操作。可以使用new 关键字操作符来创建一个对象,这就分配了内存空间。
下面是一个创建对象的例子
let emp1 = new Employee("Kiran");
let emp2 = new Employee("Kiran");
在上面的例子中,创建了两个名为emp1和emp2的对象。
每一个对象中的属性(在这个例子中,名称)都与其他对象的属性不同。从这里开始,这些属性被称为实例成员。
带有参数的类构造函数
constructor ,用于在创建对象时初始化实例成员。这些是optional ,类似于typecript中的javascript函数。
雇员对象是使用new 操作符创建的。在对象创建过程中,首先,一个被调用的代码是初始化成员变量的构造函数。
class Base {
length: number;
width: number;
constructor(length = 10, width = 0) {
this.length = length;
this.width = width;
}
}
在对象的层次结构中,你可以使用extends 类来扩展parent 类。
在构造器方法中,你必须调用super() 方法来调用超类构造器。
class Rectangle extends Base{
length: number;
width: number;
constructor() {
super();
}
}
类的继承性
Inheritance 是面向对象的概念之一,用于重复使用超类对象的所有属性和方法。
你可以创建一个自己的类,它可以扩展超类,并可以编写自己的行为。
这使得开发人员能够实现代码的可重用性和可维护性。Typescript支持inheritance ,使用extends 关键字。
class Animal {
constructor(public isVeg: boolean, public legsCount: number) {
}
eat() {
console.log(`eat non veg: ${this.isVeg}`);
}
}
class Lion extends Animal {
jump: boolean;
constructor(public isVeg: boolean, public legsCount: number, jump: boolean) {
super(isVeg, legsCount);
this.jump = jump;
}
roars() {
console.log('lion roars');
}
jumpIn() {
console.log('lion jumps');
}
}
let lion = new Lion(true, 4,true);
lion.roars(); // lion roars
lion.eat(); //eat non veg: true
注意:
Animal类被称为parent或super或base类。Lion类被称为 或 或 类。childsubclassderived- 定义父类为
Animal,子类为Lion,其中extends父类。 - 如果在子类中声明了构造函数,首先调用超类的构造函数--如果在子类中有一个扩展父类的构造函数,必须使用超级关键字调用父类的构造函数。否则就会产生编译错误,派生类的构造函数必须包含一个 "超级 "调用。
-
- 你也可以在你的子类lsas中定义和添加类属性。
Typecript中的抽象类
Abstract 类和类是一样的,只是它包含了 方法。 方法是只有 而没有实现的方法。实现需要由扩展抽象类的类来提供。abstract abstract declaration 抽象类的特点。
- 这个类包含
abstract方法和方法的实现。 - 这些类不会使用
new操作符来创建一个对象。 - 拥有抽象方法并不是强制性的。
下面是一个语法和例子
abstract class Shape {
abstract area(): void;
getName(): string {
return 'Shape';
}
}
// Generated Javascript code
var Shape = /** @class */ (function () {
function Shape() {
}
Shape.prototype.getName = function () {
return 'Shape';
};
return Shape;
}());
类型脚本访问修饰符
在typescript中,有不同类型的accessor类型应用于实例成员或变量或属性和方法。有4种类型 -public,private,protected,Readonly
public modifier如果变量在声明时没有修饰符,编译器会默认为公共的。这可以应用于变量声明或构造函数参数为公共的,也可以应用于方法。
公共或默认声明的变量或方法可以从一个类的内部或外部访问该变量private modifier 。
这可以应用于构造函数中的变量或参数。这些对类来说是私有的。
用private声明的变量或方法具有以下可访问性规则:
- 可以在一个类中使用。
- 不能在派生类中使用
- 不能在类外被访问
- 该类的对象不能被访问
protected modifier受保护的修饰符有以下可访问性规则
- 在声明的类中可访问
- 在派生类中可被访问
- 类的对象不能被访问
Readonly modifier:
实例成员变量可以应用只读的修改器。这个变量只在declaration ,或者只在constructor 中初始化。
类的静态属性
Typescript支持一个static 关键字,用于类的属性。
一般来说,每个对象都持有一个类的不同属性。
如果你想为一个类的所有对象保持相同的属性怎么办?
答案是使用属性的静态声明
这里是静态变量声明的例子。
class StaticDemo {
static staticPropertiy = 0;
normalProperty = 0;
constructor() {
StaticDemo.staticPropertiy++;
this.normalProperty++;
}
}
var s1 = new StaticDemo();
var s2 = new StaticDemo();
console.log(StaticDemo.staticPropertiy); // outputs 2
console.log( s1.normalProperty); // outputs 1
console.log(s1.normalProperty); // outputs 1
如果你有任何问题,请分享或评论。
总结
我们已经学习了在typescript中使用访问修饰符的类类型和例子,声明静态关键字。