类

在TypeScript中,类似于C#的结构,即一个文件中可以存在多个类,且文件名可以任意取,我们先看一个简单的类的示例。

 class Person {
private name: string;
private age: number; public constructor(name:string, age:number) {
this.name = name;
this.age = age;
} public talk() {
alert("Hi, my name is " + this.name + ", i am " + this.age.toString() + "!");
}
} function run() {
var p: Person = new Person("Li Lei", 18);
p.talk();
} run();

TypeScript中的类需要注意下面几个点:

  • class前不用加访问控制符,所有类都是全局公开可访问的;
  • 如果类的属性和方法不加访问控制符则默认为public;
  • 1.3开始支持protected访问权限,1.3之前仅支持public及private;
  • 构造函数不是类名而是constructor;
  • 访问类的成员变量及函数都需要加this关键字;

类的继承

在TypeScript中,如何实现类的继承呢,请看如下示例:

 class Person
{
private name: string;
private age: number; constructor(name: string, age: number)
{
this.name = name;
this.age = age;
} talk()
{
alert("Hi, my name is " + this.name + ", i am " + this.age.toString() + "!");
}
} class Student extends Person
{
private school: string; constructor(name: string, age: number, school: string)
{
super(name, age);
this.school = school;
} talk()
{
super.talk();
alert("And I`m in " + this.school + "!");
}
} function run()
{
var p: Person = new Student("Li Lei", 18, "English School");
p.talk();
} run();

类的继承需要注意以下几点:

  • 继承使用extends关键字;
  • 调用父级使用super关键字;
  • 重写父级方法不需要加override关键字,直接定义一样的方法即可;
  • 父级变量可以调用到子级的方法,符合多态的概念;

getter/setter封装

在TypeScript中我们可以对一个成员变量进行getter和setter的封装,如下:

 class Person
{
private _name:string; constructor(name: string)
{
this._name = name;
} set name(value:string) {this._name = value;}
get name() {return this._name;} talk()
{
alert("Hi, my name is " + this.name + "!");
}
} function run()
{
var p:Person = new Person(null);
p.name = "Li Lie";
p.talk();
} run();

静态数据和方法

在TypeScript中,是可以使用Static来定义静态变量及静态函数的,我们以单例类为例来看看:

 class Person
{
private static _instance:Person; static getInstance():Person
{
if(this._instance == null)
{
this._instance = new Person();
}
return this._instance;
} talk()
{
alert("Hi, my name is Li Lie!");
}
} function run()
{
Person.getInstance().talk();
} run();

reference

TypeScript允许多个类在同一个文件里,但如果类与类在不同的文件,需要这种写法:

 /// <reference path="SimpleWebSocket.ts"/>
class ComplexWebSocket extends SimpleWebSocket {
...
}

TypeScript学习笔记(三):类的更多相关文章

  1. Typescript 学习笔记三:函数

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

  2. Typescript 学习笔记五:类

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

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

    中文网: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 学习笔记二:数据类型

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

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

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

  8. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

  9. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

  10. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

随机推荐

  1. POJ 3253 Fence Repair【二叉堆】

    题意:给出n根木板,需要把它们连接起来,每一次连接的花费是他们的长度之和,问最少需要多少钱. 和上一题果子合并一样,只不过这一题用long long 学习的手写二叉堆的代码,再好好理解= = #inc ...

  2. BZOJ1048: [HAOI2007]分割矩阵

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1048 题解:搞清题意之后来个记忆化爆搜就行了. 代码: #include<cstdio& ...

  3. hdu 4604 Deque(最长不下降子序列)

    从后向前对已搜点做两遍LIS(最长不下降子序列),分别求出已搜点的最长递增.递减子序列长度.这样一直搜到第一个点,就得到了整个序列的最长递增.递减子序列的长度,即最长递减子序列在前,最长递增子序列在后 ...

  4. Java—Map.Entry

    Map是java中的接口,Map.Entry是Map的一个内部接口. Map提供了一些常用方法,如keySet().entrySet()等方法. keySet()方法返回值是Map中key值的集合:e ...

  5. hdu 1024(最大和连续子序列增强版)

    题意:最大和连续子序列的增强版,要求从一序列中取出若干段,这些段之间不能交叉,使得和最大并输出. 分析:用dp[i][j]表示前j个数取出i段得到的最大值,那么状态转移方程为dp[i][j]=max( ...

  6. Spring+iBatis+Atomikos实现JTA事务

    Atomikos是一个公司名字,旗下最著名的莫过于其Atomikos的事务管理器产品. 产品分两个:一个是开源的TransactionEssentials,一个是商业的ExtremeTransacti ...

  7. OpenGL超级宝典第5版&&开发环境搭建

    参考:http://www.zyh1690.org/build-opengl-super-bible-fifth-edition-development-environment/ 环境搭建的测试环境为 ...

  8. 纯CSS制作冒泡提示框

    来源:http://www.ido321.com/1214.html 前两天翻译了一篇文章,关于利用css的border属性制作基本图形:http://www.ido321.com/1200.html ...

  9. codeforce 702E Analysis of Pathes in Functional Graph RMQ+二进制

    http://codeforces.com/contest/702 题意:n个点,n条边,每个点出边只有一条,问从每个点出发经过k条边的边权和,以及边权最小值 思路: f[i][j] 第i个点出发,经 ...

  10. Node.js中的事件

    var util = require("util"); //导入util模块 var events = require("events"); //导入event ...