【TypeScript】TypeScript 学习 3——类
在 EcmaScript 6 中,我们将会拥有原生的类,而不是像现在通过原型链来实现。使用 TypeScript 我们能提前体验这一特性。
首先来看看一个简单的例子:
class Greeter {greeting: string;constructor(message: string) {this.greeting = message;}greet() {return "Hello, " + this.greeting;} }var greeter = new Greeter("world");
我们使用 class 关键字来定义了,使用 constructor 来定义构造函数,使用 this 关键字来指代当前对象。
除了构造函数关键字外,语法跟 C# 和 java 是比较像的。
继承
作为面向对象三大基本特征之一,TypeScript 当然支持继承。
class Animal {name:string;constructor(theName: string) { this.name = theName; }move(meters: number = 0) {alert(this.name + " moved " + meters + "m.");} }class Snake extends Animal {constructor(name: string) { super(name); }move(meters = 5) {alert("Slithering...");super.move(meters);} }class Horse extends Animal {constructor(name: string) { super(name); }move(meters = 45) {alert("Galloping...");super.move(meters);} }var sam = new Snake("Sammy the Python"); var tom: Animal = new Horse("Tommy the Palomino");sam.move(); tom.move(34);
跟接口的继承一样,都是使用 extends 关键字来继承。在子类中,我们使用 super 关键字来访问父类。在上面代码中我们看到方法的参数中有等于号,这表示方法参数的默认值。如果我们调用该方法时,不写该参数或者传入 undefined,那么这个参数就会被赋予默认值。
sam.move(); sam.move(undefined);
即上面这两段代码是等价的。
注意:TypeScript 跟 C# 和 java 一样,是不支持多继承的(虽然可以通过原型链实现)。
访问修饰符
在 TypeScript 中,现在仅有两种访问修饰符,分别是 public 和 private。
在之前的代码中,我们都能够正常访问到类中定义的属性。那么可见,类的属性默认的访问修饰符是 public 的。
class Animal {private name:string;constructor(theName: string) { this.name = theName; } }class Rhino extends Animal {constructor() { super("Rhino"); } }class Employee {private name:string;constructor(theName: string) { this.name = theName; } }var animal = new Animal("Goat"); var rhino = new Rhino(); var employee = new Employee("Bob");animal = rhino; animal = employee; //error: Animal and Employee are not compatible
我们将之前的代码中的属性的访问修饰符修改为 private 之后,就会发现编译无法通过了。
参数属性
访问修饰符不仅仅可以作用于属性,还能作用于构造函数参数。这个是 TypeScript 中的一个语法糖。
class Animal {constructor(private name: string) { }move(meters: number) {alert(this.name + " moved " + meters + "m.");} }
那么构造函数中的 name 参数将会生成一个 private 的属性。
访问器
有时候我们在设置属性的时候,希望对输入进行检查,这时候就需要用到访问器了。
var 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 {alert("Error: Unauthorized update of employee!");}} }var employee = new Employee(); employee.fullName = "Bob Smith"; if (employee.fullName) {alert(employee.fullName); }
上面我们就为 fullName 属性定义了 get 和 set 访问器了。
静态属性
在前面,我们定义的都是实例属性。那么如何定义静态属性呢?使用 static 关键字就可以了。
class Grid {static origin = {x: 0, y: 0};calculateDistanceFromOrigin(point: {x: number; y: number;}) {var xDist = (point.x - Grid.origin.x);var yDist = (point.y - Grid.origin.y);return Math.sqrt(xDist * xDist + yDist * yDist) / this.scale;}constructor (public scale: number) { } }var grid1 = new Grid(1.0); // 1x scale var grid2 = new Grid(5.0); // 5x scale alert(grid1.calculateDistanceFromOrigin({x: 10, y: 10})); alert(grid2.calculateDistanceFromOrigin({x: 10, y: 10}));
注意的是,要访问静态属性,必须加上该静态属性所在的类作为前缀。
另外,静态属性也能配合访问修饰符使用。
class Test {private static _age: number;static get age(): number {return Test._age;}static set age(value: number) {Test._age = value;} }
转载于:https://www.cnblogs.com/h82258652/p/4589941.html
【TypeScript】TypeScript 学习 3——类相关推荐
- TypeScript 的学习笔记
文章目录 1.`TypeScript` 简介 1.1.什么是 `TypeScript` 1.2.为什么要使用 `TypeScript` 2.安装 `TypeScript` 2.1.使用 `tsc` 命 ...
- TypeScript入门教程 之 类/抽象类/构造器/Getter/Setter
TypeScript入门教程 之 类/抽象类/构造器/Getter/Setter 将JavaScript中的类作为头等项很重要的原因是: 类提供了有用的结构抽象 为开发人员提供一种一致的方式来使用类, ...
- typeScript类型学习
typeScript类型学习 1. 字面量 1.1 什么是字面量 1.2 为什么要有字面量 1.3 ts中的字面量 2.|(联合类型) 3.any 4.unknown 5.unknown和any的区别 ...
- 如何学习streamdecoder类_如何学习篇5:强化2种能力——2种学习模式之运动类:隐性学习...
[本文摘要] [注]本文所述内容为学习Yjango<学习观>相关视频之后的总结,观点归Yjango所有,本文仅作为学习之用. 阅读本节,会让你对英语这类运动类知识的学习豁然开朗,你会知道英 ...
- java中蛇的属性有哪些_学习Java类的属性
学习Java类的属性-武汉北大青鸟 Public.private.protected显示了三种类中的属性和服务的类型,public是可以随意访问的.private是外界不能访问的(显示了数据的封装性) ...
- 普通话测试软件测分准吗,普通话学习测试类 | 普通话测试APP,能做到测试、学习提高两不误吗?...
原标题:普通话学习测试类 | 普通话测试APP,能做到测试.学习提高两不误吗? 普通话是如今人们生活的常用语言,但要说到参加普通话测试,如果没有提前了解普通话测试的形式与要求,也不知道自己普通话的起步 ...
- 学信息安全买计算机,大学学习计算机类信息安全方向真的很蠢吗?
大学学习计算机类信息安全方向真的很蠢吗? 本人2018届高考党,目前水平可以上一个不错的211,望借自主招生冲击985院校. 几天前,当我对老师说:"我目前最优先的选择是计算机-信息安全方向 ...
- java虚拟机预先加载哪些类_Java虚拟机JVM学习02 类的加载概述
Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...
- Java为枚举类创建成员变量_Java学习——枚举类
Java学习--枚举类 摘要:本文主要介绍了Java的枚举类. 部分内容来自以下博客: https://www.cnblogs.com/sister/p/4700702.html https://bl ...
- 2020-用多通道卷积神经网络学习单类特征用于人脸表现攻击检测
2020年,Anjith George等人,期刊:TIFS,CCFA刊,Learning One Class Representations for Face Presentation Attack ...
最新文章
- 简单读懂微生物基因组的泛基因组学
- SAP MM 预留单据里的Base date和Requirement date
- 不要相信修改注册表EnablePrefetcher文件达到加速开机速度的说法
- Linux 问题分析,性能优化
- Android如何使用API
- C语言解决汉诺塔问题
- UVa11882,Biggest Number
- 【转】C++ 存储类
- 西安电子科技大学研究生计算机专业王宇平教授学生就业岗位,西安电子科技大学计算机学院导师信息情况...
- linux 让暂停的进程恢复,Linux 下进程的挂起和恢复命令
- C语言小知识---奇葩的小数
- 计算机图形学(一) 视频显示设备_3_随机扫描显示器
- Hive报错:Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
- mysql日期为00_MySQL 8.0.13设置日期为0000-00-00 00:00:00时出现的问题解决
- 树莓派USB摄像头和motion实现网络监控
- Ubuntu安装字体
- 离散数学1-数理逻辑的基本概念
- 企业邮箱用户名如何设置修改?企业邮箱域名后缀选择
- 中国艺术孙溟㠭书法《觉》
- 网络天才网页中文版_akinator中文版在线玩
热门文章
- rpt水晶报表制作过程
- HDU ACM 1224 Free DIY Tour (SPFA)
- 在LINUX下安装 Sybase ASE 11.0.3.3
- 网友的VOIP总结 1
- linux 进程0 写时复制,linux 写时复制 COW 过程梳理
- 发邮件请领导审批文件怎么说_住建部:1月1日起,两项甲级资质实行告知承诺审批!...
- python自动化办公 51cto_聊聊 Python 办公自动化之一 Excel
- Zookeeper权限控制ACL详解
- python 工程生成requirements
- 3-25Pytorch与张量填充3-26Pytorch与傅里叶变化