TypeScript 除了实现了所有 ES6 中的类的功能以外,还添加了一些新的用法(部分ES7)。

一、ES6中类的主要用法:

1、使用 class 定义类,使用 constructor 定义构造函数。通过 new 生成新实例的时候,会自动调用构造函数。

2、使用 extends 关键字实现继承,子类中使用 super 关键字来调用父类的构造函数和方法。

3、使用 static 修饰符修饰的方法称为静态方法,它们不需要实例化,而是直接通过类来调用。

类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用

class Person {
name: string;
constructor(name: string) {
this.name = name;
}
run = (): string => {
// 实例方法
return this.name;
};
static print = () => {
console.log("Persion的静态方法"
);
};

}
var p = new Person("testName");
p.run();
Person.print();

二、实现的ES7中类的用法:

1、ES6 中实例的属性只能通过构造函数中的 this.xxx 来定义,ES7 提案中可以直接在类里面定义

2、ES6 中只有静态方法,ES7 提案中,可以使用 static 定义静态属性

class Person {
name: string;
static title: string = "类的静态属性";
constructor(name: string) {
this.name = name;
}
run = (): string => {
// 实例方法
return this.name;
};
static print = () => {
console.log("Persion的静态方法");
};
}
var p = new Person("testName");
p.run();
Person.print();
console.log(Person.title);

三、TypeScript自身实现的类的用法:

1、TypeScript 新增了三种访问修饰符来修饰属性或方法,分别是 publicprivateprotected

  • public (共有)修饰的属性或方法是公有的,可以在任何地方被访问到,默认所有的属性和方法都是 public。在类的里边、子类以及类的外边都可以访问

    class Person {
    name: string; //定义属性 前面省略了public关键词
    constructor(n: string) {
    // 构造函数---实例化类的时候出发的方法
    this.name = n;
    }
    run = (): string => {
    return this.name;
    };
    }
    var p = new Person("testName");
    console.log(26, p.name); // 可访问
    console.log(p.run()); // 可调用
  • protected(保护) 修饰的属性或方法是受保护的,它和 private 类似,区别是它在子类中也是允许被访问的。在类里边和子类中可以访问,在类外部无法访问

    class Person {
    protected name: string; //定义属性 前面省略了public关键词
    constructor(n: string) {
    // 构造函数---实例化类的时候出发的方法
    this.name = n;
    }
    run = (): string => {
    return this.name; // 可访问
    };
    }
    var p = new Person("testName");
    console.log(p.run()); // 可调用 // 通过extends和super实现继承
    class Web extends Person {
    constructor(name: string) {
    super(name);
    console.log(this.name); // 可访问
    }
    }
    const w = new Web("test");
    // console.log(w.name) //不可访问
    // console.log(p.name) // 不可访问
  • private (私有)修饰的属性或方法是私有的,不能在声明它的类的外部访问。在类里边可以访问,子类和类外部无法访问
  • class Person {
    private name: string; //定义属性 前面省略了public关键词
    constructor(name: string) {
    // 构造函数---实例化类的时候出发的方法
    this.name = name;
    }
    run = (): string => {
    return this.name; // 可访问
    };
    }
    var p = new Person("testName"); // 通过extends和super实现继承
    class Web extends Person {
    constructor(name: string) {
    super(name);
    // console.log(this.name); // 可访问
    }
    }
    const w = new Web("test");
    // console.log(w.name) //不可访问
    // console.log(p.name) // 不可访问

2、readonly只读属性关键字,只允许出现在属性声明或索引签名中

3、abstract 用于定义抽象类和其中的抽象方法。抽象类是不允许被实例化的;抽象类中的抽象方法必须被子类实现,抽象方法只能放在抽象类中。抽象类和抽象方法用来定义标准,为子类提供一个基类

abstract class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
abstract eat(): string;
} class Dog extends Animal {
eat = () => {
return "狗粮"
;
};

} let dog = new Dog("kittle");
console.log(dog.eat());

ts中的类的更多相关文章

  1. ts中的类的定义,继承和修饰符

    自己搞一个ts文件 里面写代码如下,试一下就行了 /* 1.vscode配置自动编译 1.第一步 tsc --inti 生成tsconfig.json 改 "outDir": &q ...

  2. TypeScript完全解读(26课时)_9.TypeScript完全解读-TS中的类

    9.TypeScript完全解读-TS中的类 创建class.ts文件,并在index.ts内引用 创建一个类,这个类在创建好后有好几个地方都标红了 这是tslint的一些验证规则 一保存就会自动修复 ...

  3. VC++中的类的内存分布(上)

    0.序 目前正在学习C++中,对于C++的类及其类的实现原理也挺感兴趣.于是打算通过观察类在内存中的分布更好地理解类的实现.因为其实类的分布是由编译器决定的,而本次试验使用的编译器为VS2015 RC ...

  4. VC++中的类的内存分布(上)(通过强制转换,观察地址,以及地址里的值来判断)

    0.序 目前正在学习C++中,对于C++的类及其类的实现原理也挺感兴趣.于是打算通过观察类在内存中的分布更好地理解类的实现.因为其实类的分布是由编译器决定的,而本次试验使用的编译器为VS2015 RC ...

  5. JDK中Unsafe类详解

    Java中Unsafe类详解 在openjdk8下看Unsafe源码 浅析Java中的原子操作 Java并发编程之LockSupport http://hg.openjdk.java.net/jdk7 ...

  6. TypeScript完全解读(26课时)_8.ES6精讲-ES6中的类(进阶)

    8.TypeScript完全解读-ES6精讲-类(进阶) 在index.ts内引入 Food创建的实例赋值给Vegetabled这个原型对象,这样使用Vegetables创建实例的时候,就能继承到Fo ...

  7. Java中的类反射

    一.反射的概念 : 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...

  8. Vue实践TS中的一些常见错误解决方案

    mixin报错 import { Component, Prop, Vue ,Mixins} from 'vue-property-decorator' import httpminix from ' ...

  9. 三、hibernate中持久化类的使用

    hibernate的持久化类 持久化:将内存中的一个对象持久化到数据库中的过程,hibernate就是一个用来进行持久化的框架 持久化类:一个Java对象与数据库中表建立了关系映射,那么这个类在hib ...

随机推荐

  1. MyBatis mapper文件中使用常量

    MyBatis mapper文件中使用常量 Java 开发中会经常写一些静态常量和静态方法,但是我们在写sql语句的时候会经常用到判断是否等于 //静态类 public class CommonCod ...

  2. STM32学习笔记 —— 0.1 Keil5安装和DAP仿真下载器配置的相关问题与注意事项

    Keil5安装的注意事项 安装细节在此不再做过多赘述,主要介绍一下注意事项: 安装路径中不能有中文. ARM的Keil的路径不能与51的Keil的有冲突,必须将目录分开. Keil5中不会自动添加芯片 ...

  3. 剑指offer-面试题29-顺时针打印矩阵-矩阵

    /* 题目: 输入一个矩阵,按照从外到内顺时针的顺序依次打印每一个数字. */ /* 思路: 1.将打印矩阵看作是打印一个个从外向内的环. 2.每一个环都有一个起始节点,起始节点的坐标*2小于行数和列 ...

  4. 咸鱼的ACM之路:DFS水题集

    DFS的核心就是从一种状态出发,转向任意的一个可行状态,直到达到结束条件为止.(个人理解) 下面全是洛谷题,毕竟能找到测试点数据的OJ我就找到这一个....在其他OJ上直接各种玄学问题... P159 ...

  5. Eigen库学习---Map类

    Eigen中定义了一系列的vector和matrix,相比copy数据,更一般的方式是复用数据的内存,将它们转变为Eigen类型.Map类很好地实现了这个功能. Map定义 Map(PointerAr ...

  6. Pwnable.kr

    Dragon —— 堆之 uaf 开始堆的学习之旅. uaf漏洞利用到了堆的管理中fastbin的特性,关于堆的各种分配方式参见堆之*bin理解 在SecretLevel函数中,发现了隐藏的syste ...

  7. Codeforces Round #620 (Div. 2) A-F代码 (暂无记录题解)

    A. Two Rabbits (手速题) #include<bits/stdc++.h> using namespace std; typedef long long ll; int ma ...

  8. C# Dynamic与Newtonsoft.Json的应用

    C#中Dynamic关键字 dynamic关键字和动态语言运行时(DLR)是.Net 4.0中新增的功能. 什么是"动态"? 编程语言有时可以划分为静态类型化语言和动态类型化语言. ...

  9. 插入jupyter notebook代码

    <iframe src="https://nbviewer.jupyter.org/gist/gaowenxin95/53408e0f1ce268430efaad2cb1f0ca4f& ...

  10. 区间无修改莫队学习笔记(lg1494小z的袜子)

    这几天感觉要学的要做的有点多,就偷了个懒没写笔记,赶紧补一下 莫队嘛,一个离线处理各种区间(或树上)询问的神奇算法 简单而言,按左端点排个序然后指针l,r递推就好了 复杂度证明貌似是不待修改的n^1. ...