TypeScript学习笔记(三):类
类
在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学习笔记(三):类的更多相关文章
- Typescript 学习笔记三:函数
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Typescript 学习笔记四:回忆ES5 中的类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Typescript 学习笔记七:泛型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Typescript 学习笔记六:接口
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Typescript 学习笔记二:数据类型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Typescript 学习笔记一:介绍、安装、编译
前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
- VSTO学习笔记(三) 开发Office 2010 64位COM加载项
原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...
随机推荐
- Java 7 语法新特性
一.二进制数字表达方式 原本整数(以60为例)能够用十进制(60).八进制(074).十六进制(0x3c)表示,唯独不能用二进制表示(111100),Java 7 弥补了这点. public clas ...
- macro names must be identifiers
1.错把 #include 写成了 #define 会报这个错 2.定义一个不存在的宏业会报这个错,如加了-DANDRO 而ANDRO不存在
- 脚本AI与脚本引擎
Scripted AI and Scripting Engines 脚本AI与脚本引擎 This chapter discusses some of the techniques you can us ...
- UVA 10537 The Toll! Revisited 过路费(最短路,经典变形)
题意:给一个无向图,要从起点s运送一批货物到达终点e,每个点代表城镇/乡村,经过城镇需要留下(num+19)/20的货物,而经过乡村只需要1货物即可.现在如果要让p货物到达e,那么从起点出发最少要准备 ...
- 深入浅出ClassLoader
你真的了解ClassLoader吗? 这篇文章翻译自zeroturnaround.com的 Do You Really Get Classloaders? ,融入和补充了笔者的一些实践.经验和样例.本 ...
- iE6、7、8、9、10、11兼容的Cookie
<%@ Master Language="C#" Debug="true" AutoEventWireup="true" Inheri ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- UI篇--布局问题
1.android:layout_marginRight 不起作用解决方法 今天想在RelativeLayout的左右分别放上一个按钮, 左边按钮用marginLeft="10dp" ...
- Android 打勾显示输入的密码
main.xml: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:and ...
- jquery的each()函数用法
each()方法能使DOM循环结构简洁,不容易出错.each()函数封装了十分强大的遍历功能,使用也很方便,它可以遍历一维数组.多维数组.DOM, JSON 等等 在javaScript开发过程中使用 ...