TypeScript中面向对象
创始人
2024-05-28 18:19:16
0

面向对象

要想面向对象,操作对象,首先便要拥有对象;

要创建对象,必须要先定义类,所谓的类可以理解为对象的模型;

程序中可以根据类创建指定类型的对象;

举例来说:

可以通过Person类来创建人的对象,通过Dog类创建狗的对象,不同的类可以用来创建不同的对象;

定义类

class 类名 {属性名: 类型;constructor(参数: 类型){this.属性名 = 参数;}方法名(){....}
}

示例:

    class Person{name: string;age: number;constructor(name: string, age: number){this.name = name;this.age = age;}sayHello(){console.log(`大家好,我是${this.name}`);}}

使用类:

const p = new Person('孙悟空', 18);
p.sayHello();

构造函数

可以使用constructor定义一个构造器方法;

注1:在TS中只能有一个构造器方法!
例如:

class C{name: string;age: numberconstructor(name: string, age: number) {this.name = name;this.age = age;}
}

同时也可以直接将属性定义在构造函数中:

class C {constructor(public name: string, public age: number) {}
}

上面两种定义方法是完全相同的!

注2:子类继承父类时,必须调用父类的构造方法(如果子类中也定义了构造方法)!

例如:

class A {protected num: number;constructor(num: number) {this.num = num;}
}
class X extends A {protected name: string;constructor(num: number, name: string) {super(num);this.name = name;}
}

如果在X类中不调用super将会报错!

封装

对象实质上就是属性和方法的容器,它的主要作用就是存储属性和方法,这就是所谓的封装

默认情况下,对象的属性是可以任意的修改的,为了确保数据的安全性,在TS中可以对属性的权限进行设置

  • 静态属性(static):
    • 声明为static的属性或方法不再属于实例,而是属于类的属性;
  • 只读属性(readonly):
    • 如果在声明属性时添加一个readonly,则属性便成了只读属性无法修改
  • TS中属性具有三种修饰符:
    • public(默认值),可以在类、子类和对象中修改
    • protected ,可以在类、子类中修改
    • private ,可以在类中修改

示例:

public:

class Person{public name: string; // 写或什么都不写都是publicpublic age: number;constructor(name: string, age: number){this.name = name; // 可以在类中修改this.age = age;}sayHello(){console.log(`大家好,我是${this.name}`);}
}
class Employee extends Person{constructor(name: string, age: number){super(name, age);this.name = name; //子类中可以修改}
}
const p = new Person('孙悟空', 18);
p.name = '猪八戒';// 可以通过对象修改

protected:

class Person{protected name: string;protected age: number;constructor(name: string, age: number){this.name = name; // 可以修改this.age = age;}sayHello(){console.log(`大家好,我是${this.name}`);}
}
class Employee extends Person{constructor(name: string, age: number){super(name, age);this.name = name; //子类中可以修改}
}
const p = new Person('孙悟空', 18);
p.name = '猪八戒';// 不能修改

private:

class Person{private name: string;private age: number;constructor(name: string, age: number){this.name = name; // 可以修改this.age = age;}sayHello(){console.log(`大家好,我是${this.name}`);}
}
class Employee extends Person{constructor(name: string, age: number){super(name, age);this.name = name; //子类中不能修改}
}
const p = new Person('孙悟空', 18);
p.name = '猪八戒';// 不能修改

属性存取器

对于一些不希望被任意修改的属性,可以将其设置为private

直接将其设置为private将导致无法再通过对象修改其中的属性

我们可以在类中定义一组读取、设置属性的方法,这种对属性读取或设置的属性被称为属性的存取器

读取属性的方法叫做setter方法,设置属性的方法叫做getter方法

示例:

class Person{private _name: string;constructor(name: string){this._name = name;}get name(){return this._name;}set name(name: string){this._name = name;}
}
const p1 = new Person('孙悟空');
// 实际通过调用getter方法读取name属性
console.log(p1.name);
// 实际通过调用setter方法修改name属性 
p1.name = '猪八戒';

静态属性

静态属性(方法),也称为类属性。使用静态属性无需创建实例,通过类即可直接使用

静态属性(方法)使用static开头

示例:

class Tools{static PI = 3.1415926;static sum(num1: number, num2: number){return num1 + num2}
}
console.log(Tools.PI);
console.log(Tools.sum(123, 456));

this

在类中,使用this表示当前对象

继承

继承时面向对象中的又一个特性

通过继承可以将其他类中的属性和方法引入到当前类中

示例:

class Animal{name: string;age: number;constructor(name: string, age: number){this.name = name;this.age = age;}
}
class Dog extends Animal{bark(){console.log(`${this.name}在汪汪叫!`);}
}
const dog = new Dog('旺财', 4);
dog.bark();

通过继承可以在不修改类的情况下完成对类的扩展

重写

发生继承时,如果子类中的方法会替换掉父类中的同名方法,这就称为方法的重写

示例:

class Animal{name: string;age: number;constructor(name: string, age: number){this.name = name;this.age = age;}run(){console.log(`父类中的run方法!`);}
}
class Dog extends Animal{bark(){console.log(`${this.name}在汪汪叫!`);}run(){console.log(`子类中的run方法,会重写父类中的run方法!`);}
}
const dog = new Dog('旺财', 4);
dog.bark();

在子类中可以使用super来完成对父类的引用

抽象类(abstract class)

抽象类是专门用来被其他类所继承的类,它只能被其他类所继承不能用来创建实例

abstract class Animal{abstract run(): void;bark(){console.log('动物在叫~');}
}
class Dog extends Animals{run(){console.log('狗在跑~');}
}

使用abstract开头的方法叫做抽象方法,抽象方法没有方法体只能定义在抽象类中,继承抽象类时抽象方法必须要实现;

正片结束!

        最近发现了一件事情:自己很少静下来去思考一些事情了。虽然说的是,每天每个时候我基本都有对应的事情做,但说完全没时间去停下来一二十分钟那是假的。这种匆忙的日常也让我在这几天内搞杂了几件事情,也当了几次的大冤种,这让我不由的回想起了第一次做项目的时候,我当时最深刻的感受:我们永远不要在自己所看重的事情上,投入不切实际的期待,附加不着边际的价值,因为人生唯一确定的,就是不确定的人生。做好自己分内的事情,降低期待,提示自己,客观事实又怎么会因为人意志的改变而改变呢?

        这次博客也算是让我静下来思考了一会,还是希望自己在接下来的日子里,能有意识,无意识的多思考一些事情吧!

相关内容

热门资讯

功夫熊猫中的经典台词 功夫熊猫中的经典台词  1、一切都不是偶然。  2、何必躲呢,躲不过的。  3、着急的时候脑子也乱了...
《十全九美》的台词 《十全九美》的台词  1、艺人啊 要是不红那就是死 要是红了… 那是生不如死 !  2、南宫小姐被太...
中秋节晚会上的主持词 关于中秋节晚会上的主持词(精选5篇)  主持词需要富有情感,充满热情,才能有效地吸引到观众。在当下的...
民主生活会主持词 民主生活会主持词  一、主持词简介  由主持人于节目进行过程中串联节目的串联词。如今的各种演出活动和...
2022年央视春节联欢晚会主... 2022年央视春节联欢晚会主持词  借鉴诗词和散文诗是主持词的一种写作手法。在现今人们越来越重视活动...
少先队建队日主持词 少先队建队日主持词  什么是主持词  由主持人于节目进行过程中串联节目的串联词。如今的各种演出活动和...
晚会节目串词主持稿 晚会节目串词主持稿  在现在社会,很多地方都会使用到主持稿,通过主持稿的写作将主题贯穿于所有的节目之...
幼儿园开园揭牌剪彩仪式主持词 幼儿园开园揭牌剪彩仪式主持词  主持词要把握好吸引观众、导入主题、创设情境等环节以吸引观众。在一步步...
公司辞旧迎新晚会主持词串词   男:尊敬的各位领导、各位来宾,  女:亲爱的同事们  合:大家下午好!  男:光阴似箭,岁月如梭...
纯中式婚礼主持词 纯中式婚礼主持词(通用5篇)  主持词是主持人在台上表演的灵魂之所在。在现在的社会生活中,越来越多的...
悟空传的经典台词 悟空传的经典台词  1、我曾深爱过,我不在乎结局。  2、我知道天会愤怒,那,你知不知道,天也会颤抖...
最有创意的广告词(经典 最有创意的广告词(经典  01 钱不是问题,问题是没钱。  02 钻石恆久远,一颗就破產。  03 ...
毕业感谢致辞 关于毕业感谢致辞(精选15篇)  无论是在学校还是在社会中,大家都写过致辞吧,致辞的措词造句要考虑与...
年会嘉宾简短致辞 年会嘉宾简短致辞  在日复一日的学习、工作或生活中,大家总少不了要接触或使用致辞吧,致辞具有很强的实...
成长礼主持稿 成长礼主持稿(通用8篇)  在日常生活和工作中,需要使用主持稿的情况越来越多,主持稿是在晚会、联欢会...
电视剧《放羊的星星》经典台词 电视剧《放羊的星星》经典台词  在现实社会中,用到台词的地方越来越多,台词是一种特殊的,也是很难掌握...
抓周仪式主持词 抓周仪式主持词范文  主持词是主持人在台上表演的灵魂之所在。在如今这个中国,主持词是活动、集会等的必...
年终总结大会主持词结束语 年终总结大会主持词结束语  主持词是各种演出活动和集会中主持人串联节目的串联词。时代不断在进步,主持...
纯中式婚礼主持词(2) 让我们共同举起手中的酒杯,共同祝福我们这一对知心爱人,祝福他们在爱的旅途上风雨相承,相濡以沫,真爱一...
幼儿园园庆主持词 幼儿园园庆主持词  利用在中国拥有几千年文化的诗词能够有效提高主持词的感染力。在人们积极参与各种活动...