TypeScript入门-类
▓▓▓▓▓▓ 大致介绍
在ECMASript6中引入了类这一概念,通过class声明一个类。对于学习过C和C++的人应该不会陌生
▓▓▓▓▓▓ 类
看一个简单的类:
class Greeter {
greeting: string;
constructor(message: string){
this.greeting = message;
};
greet(){
return "Hello, " + this.greeting;
}
} let greeter = new Greeter('world');
在上面的例子中,利用class关键字声明了一个类Greeter,在类中,定义了一个属性,一个构造函数和一个方法
▓▓▓▓▓▓ 继承
类通常都是用来继承的,但是Typescript中的继承和C中的继承还是有点差别的
例如:
class Animal {
name:string;
constructor(theName: string) { this.name = theName; }
move(distanceInMeters: number = 0) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
} class Snake extends Animal {
constructor(name: string) { super(name); }
move(distanceInMeters = 5) {
console.log("Slithering...");
super.move(distanceInMeters);
}
} class Horse extends Animal {
constructor(name: string) { super(name); }
move(distanceInMeters = 45) {
console.log("Galloping...");
super.move(distanceInMeters);
}
} let sam = new Snake("Sammy the Python");
let tom: Animal = new Horse("Tommy the Palomino"); sam.move();
tom.move(34);
首先定义了一个类Animal,之后利用关键字extends定义了一个继承Animal的类Snake,可以发现在Snake的构造函数里使用了super()方法,这是因为包含constructor函数的派生类必须调用super(),它会执行基类的构造方法。
在继承类中重写了构造函数,super.move()是继承父类的方法
▓▓▓▓▓▓ public、private和protected
这三个概念对于学习过C的人应该很容易理解
public:公开的,在类外也是可以访问的
之前写的类中都是默认为public
class Animal {
public name: string;
public constructor(theName: string) { this.name = theName; }
public move(distanceInMeters: number) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
}
private:私有的,只有在该类中可以访问,在继承类中都不可访问
class Animal {
private name: string;
public constructor(message: string){
this.name = message;
}
} let animal = new Animal('cat');
animal.name;//error
protected:保护的,是介于public和private之间的,和private的区别就是在继承类中时可以访问的
class Animal {
private name: string;
protected sex: string;
public constructor(message: string){
this.name = message;
}
} class Snake extends Animal {
constructor(message){super(message)};
get(){
console.log(this.name); //error
console.log(this.sex);
}
}
在上面的例子中,name是private,在继承类中是不可以访问的,而sex是可以被访问的,当然这两个属性在类外都不可以被访问
注意:如果一个类的构造函数被声明为protected,这意味着这个类不能在包含它的类外被实例化,但是能被继承。
▓▓▓▓▓▓ readonly修饰符
可以用关键字readonly声明属性为只读的,只读属性必须是在声明时或者构造函数里初始化
class Octopus {
readonly name: string;
readonly numberOfLegs: number = 8;
constructor (theName: string) {
this.name = theName;
}
}
let dad = new Octopus("Man with the 8 strong legs");
dad.name = "Man with the 3-piece suit"; // error! name is readonly.
▓▓▓▓▓▓ 参数属性
利用参数属性可以简写很多代码
class Octopus {
name: string;
constructor (theName: string) {
this.name = theName;
}
} //利用参数属性
class Octopus {
constructor(public name: string){}
}
这两段代码的作用是一样的
▓▓▓▓▓▓ 存取器
TypeScript支持getters/setters来截取对对象成员的访问。 它能帮助你有效的控制对对象成员的访问。
let passcode = "secret passcode"; class Employee {
private _fullName: string; get fullName(): string {
return this._fullName;
} set fullName(newName: string) {
if (passcode && passcode == "secret passcode") {
this._fullName = newName;
}
else {
console.log("Error: Unauthorized update of employee!");
}
}
} let employee = new Employee();
employee.fullName = "Bob Smith";
if (employee.fullName) {
alert(employee.fullName);
}
▓▓▓▓▓▓ 抽象类
抽象类是供其它类继承的基类。 他们一般不会直接被实例化。 不同于接口,抽象类可以包含成员的实现细节。abstract关键字是用于定义抽象类和在抽象类内部定义抽象方法。抽象类中的抽象方法不包含具体实现并且必须在派生类中实现。
abstract class Department { constructor(public name: string) {
} printName(): void {
console.log('Department name: ' + this.name);
} abstract printMeeting(): void; // 必须在派生类中实现
} class AccountingDepartment extends Department { constructor() {
super('Accounting and Auditing'); // constructors in derived classes must call super()
} printMeeting(): void {
console.log('The Accounting Department meets each Monday at 10am.');
} generateReports(): void {
console.log('Generating accounting reports...');
}
} let department: Department; // ok to create a reference to an abstract type
department = new Department(); // error: cannot create an instance of an abstract class
department = new AccountingDepartment(); // ok to create and assign a non-abstract subclass
department.printName();
department.printMeeting();
department.generateReports(); // error: method doesn't exist on declared abstract type
参考资料:
TypeScript入门-类的更多相关文章
- TypeScript入门四:TypeScript的类(class)
TypeScript类的基本使用(修饰符) TypeScript类的抽象类(abstract) TypeScript类的高级技巧 一.TypeScript类的基本使用(修饰符) TypeScript的 ...
- TypeScript入门指南(JavaScript的超集)
TypeScript入门指南(JavaScript的超集) 你是否听过 TypeScript? TypeScript 是 JavaScript 的超集,TypeScript结合了类型检查和静态分析 ...
- TypeScript入门实例
前言 TypeScript是JavaScript的超集,微软公司开发,利用es6语法,实现对js的面向对象编程思想,写代码的时候会像强类型语言一样,指定参数类型.返回值类型,类型不对会报错,但编译后还 ...
- typescript 入门教程一
##### 从今天开始,持续更新typescript入门教程系列.... 目前ts越来越火,主流的前端框架,好比*angular,vue 3*均是采用ts来编写,所有很多公司的项目都是用**ts**来 ...
- TypeScript入门五:TypeScript的接口
TypeScript接口的基本使用 TypeScript函数类型接口 TypeScript可索引类型接口 TypeScript类类型接口 TypeScript接口与继承 一.TypeScript接口的 ...
- TypeScript 入门教程学习笔记
TypeScript 入门教程学习笔记 1. 数据类型定义 类型 实例 说明 Number let num: number = 1; 基本类型 String let myName: string = ...
- TypeScript 入门自学笔记 — 类型断言(二)
码文不易,转载请带上本文链接,感谢~ https://www.cnblogs.com/echoyya/p/14558034.html 目录 码文不易,转载请带上本文链接,感谢~ https://www ...
- TypeScript 素描 - 类
本文虽然是学自官方教程而来,但是也融入了自己的理解,而且对官方的例子做了一些修改 /* 类 面向对象编程的一大核心 使用C#.Java进行编程的朋友肯定已经是不能够再熟悉了 TypeScript的类与 ...
- TypeScript入门(三)面向对象特性
一.类(Class) 类是ts的核心,使用ts开发时,大部分代码都是写在类里面. 1.类的声明 多个对象有相同的属性和方法,但是状态不同. 声明类的属性和方法时可以加 访问控制符,作用是:类的属性和方 ...
随机推荐
- python---Redis 学习笔记
缓存 前言: 大家都听过缓存,缓存是干啥的呢?我们可以和json和pickle来说,两个程序之间实现信息交互,可以通过在A程序中把数据改成json ,然后传给B程序,通过文件这个介质.文件这个效率很低 ...
- Android 学习 - Telnet 控制AVD
启动Android Virtual Device之后,使用telnet,可以方便地控制AVD. 首先,获取端口号.启动AVD后,在标题栏上方会出现端口号:设备名,在下面的截图中为5554:N4-15- ...
- Struts2 result type(结果类型)
转自:http://www.cnblogs.com/liaojie970/p/7151103.html 在struts2框架中,当action处理完之后,就应该向用户返回结果信息,该任务被分为两部分: ...
- Tornado 高并发源码分析之六---异步编程的几种实现方式
方式一:通过线程池或者进程池 导入库futures是python3自带的库,如果是python2,需要pip安装future这个库 备注:进程池和线程池写法相同 from concurrent.fut ...
- 进程间通信___命名管道(FIFO)
命名管道(FIFO) 基本概念 命名管道和一般的管道基本相同,但也有一些显著的不同: 命名管道是在文件系统中作为一个特殊的设备文件而存在的. 不同祖先的进程之间可以通过管道共享数据. 当共享管道的进程 ...
- 初次用SqlServer查看本地的Excel文件时需要注意的地方
日常用到通过SqlServer 读取Excel文件的案例 ,记录下来 文件路径 :C:\Users\Administrator\Desktop\icd10.xls 1.查询语句: SELECT *F ...
- canvas二进制字符下落
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3 ...
- noip2010 关押罪犯 (vijos1776)
题目 S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示某两名罪 ...
- c++ 组合模式(composite)
原文地址:http://www.cnblogs.com/jiese/p/3168844.html 当你发现需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用 ...
- 基于Ubuntu16搭建Hadoop大数据完全分布式环境
[目的]:学习大数据 在此记录搭建大数据的过程. [系统环境] 宿主机操作系统:Win7 64位 虚拟机软件:Vmware workstation 12 虚拟机:Ubuntu 16 64位桌面版 [步 ...