ts中的类
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 新增了三种访问修饰符来修饰属性或方法,分别是 public、private 和 protected。
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中的类的更多相关文章
- ts中的类的定义,继承和修饰符
自己搞一个ts文件 里面写代码如下,试一下就行了 /* 1.vscode配置自动编译 1.第一步 tsc --inti 生成tsconfig.json 改 "outDir": &q ...
- TypeScript完全解读(26课时)_9.TypeScript完全解读-TS中的类
9.TypeScript完全解读-TS中的类 创建class.ts文件,并在index.ts内引用 创建一个类,这个类在创建好后有好几个地方都标红了 这是tslint的一些验证规则 一保存就会自动修复 ...
- VC++中的类的内存分布(上)
0.序 目前正在学习C++中,对于C++的类及其类的实现原理也挺感兴趣.于是打算通过观察类在内存中的分布更好地理解类的实现.因为其实类的分布是由编译器决定的,而本次试验使用的编译器为VS2015 RC ...
- VC++中的类的内存分布(上)(通过强制转换,观察地址,以及地址里的值来判断)
0.序 目前正在学习C++中,对于C++的类及其类的实现原理也挺感兴趣.于是打算通过观察类在内存中的分布更好地理解类的实现.因为其实类的分布是由编译器决定的,而本次试验使用的编译器为VS2015 RC ...
- JDK中Unsafe类详解
Java中Unsafe类详解 在openjdk8下看Unsafe源码 浅析Java中的原子操作 Java并发编程之LockSupport http://hg.openjdk.java.net/jdk7 ...
- TypeScript完全解读(26课时)_8.ES6精讲-ES6中的类(进阶)
8.TypeScript完全解读-ES6精讲-类(进阶) 在index.ts内引入 Food创建的实例赋值给Vegetabled这个原型对象,这样使用Vegetables创建实例的时候,就能继承到Fo ...
- Java中的类反射
一.反射的概念 : 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...
- Vue实践TS中的一些常见错误解决方案
mixin报错 import { Component, Prop, Vue ,Mixins} from 'vue-property-decorator' import httpminix from ' ...
- 三、hibernate中持久化类的使用
hibernate的持久化类 持久化:将内存中的一个对象持久化到数据库中的过程,hibernate就是一个用来进行持久化的框架 持久化类:一个Java对象与数据库中表建立了关系映射,那么这个类在hib ...
随机推荐
- Wannafly Winter Camp 2020 Day 6A Convolution - NTT
求 \(\sum_{i=1}^n \sum_{j=1}^n 2^{a_ia_j}\) Solution 化简一下 \[ 2^{a_ia_j} = p^{(a_i+a_j)^2-a_i^2-a_j^2} ...
- linux命令su,sudo 使用和区别
1- sudo 与 su 两个命令的最大区别是: sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码.另外一个区别是其默认行为.sudo 命令只允许使用提升的权限运行单个命 ...
- 安装Docker到CentOS(YUM)
运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:Docker 17.12.1-ce 硬件配置:无 安装过程 1.配置YUM-Docker存储库 ...
- Wannafly Winter Camp 2020 Day 5I Practice for KD Tree - 二维线段树
给定一个 \(n \times n\) 矩阵,先进行 \(m_1 \leq 5e4\) 次区间加,再进行 \(m_2 \leq 5e5\) 次询问,每次询问要求输出矩形区间内的最大数.\(n \leq ...
- python3练习100题——056
题目:画图,学用circle画圆形. 可以用turtle.circle画图. import turtle turtle.setup(0.6,0.6) turtle.pensize(3) turtle. ...
- Ubuntu 打不开终端 侧边栏消失的解决办法
在网上找了很多办法,大多不行,具体原因也不太清楚,应该是Unity某些配置被改了. 我是在ubuntu14.04平台利用apt-get卸载python后,关机重启出现"打不开终端和侧边栏消失 ...
- JavaDay3(上)
Java learning_Day3(上) 本人学习视频用的是马士兵的,也在这里献上 <链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA> ...
- 洛谷p1980 计数问题
题目描述 试计算在区间 111 到 nn n的所有整数中,数字x(0≤x≤9) x(0 ≤ x ≤ 9)x(0≤x≤9)共出现了多少次?例如,在 111到11 11 11中,即在 1,2,3,4,5, ...
- 熵权法(the Entropy Weight Method)以及MATLAB实现
按照信息论基本原理的解释,信息是系统有序程度的一个度量,熵是系统无序程度的一个度量:如果指标的信息熵越小,该指标提供的信息量越小,在综合评价中所起作用理当越小,权重就应该越低.因此,可利用信息熵这个工 ...
- Gin_中间件
gin可以构建中间件,但它只对注册过的路由函数起作用 对于分组路由,嵌套使用中间件,可以限定中间件的作用范围 中间件分为全局中间件,单个路由中间件和群组中间件 gin中间件必须是一个 gin.Hand ...