Typescript 学习笔记五:类
目录:
- Typescript 学习笔记一:介绍、安装、编译
- Typescript 学习笔记二:数据类型
- Typescript 学习笔记三:函数
- Typescript 学习笔记四:回忆Es5 中的类
- Typescript 学习笔记五:类
- Typescript 学习笔记六:接口
- Typescript 学习笔记七:泛型
类的定义
- ES5 中定义:
function Person (name) {
this.name=name;
this.run = function () {
console.log(this.name)
}
}
var p = new Person('张三');
p.run();
- ts 中定义:
使用class
关键词。
class Person {
name:string; // 属性,前面省略了 public 关键词
constructor (name:string) { // 构造函数,实例化类的时候触发的方法
this.name = name;
}
run ():void {
console.log(`${this.name}在运动`);
}
getName ():string {
return this.name;
}
setName (name:string):void {
this.name = name;
}
}
let p = new Person('李四');
p.run();
p.setName('王五');
console.log(p.getName());
继承
使用关键词extends
、super
。
// 父类
class Person {
name:string; // 属性,前面省略了 public 关键词
constructor (name:string) { // 构造函数,实例化类的时候触发的方法
this.name = name;
}
run ():void {
console.log(`${this.name}在运动`);
}
}
let p = new Person('李四');
p.run(); // 李四在运动
// 子类继承父类
class Child extends Person {
constructor (name:string) {
super(name); // 初始化父类的构造函数
}
}
let c = new Child('周六');
c.run(); // 周六在运动
父类的方法和子类的方法一致,子类会执行子类自己的方法
// 父类
class Person {
name:string; // 属性,前面省略了 public 关键词
constructor (name:string) { // 构造函数,实例化类的时候触发的方法
this.name = name;
}
run ():void {
console.log(`${this.name}在运动`);
}
}
let p = new Person('李四');
p.run(); // 李四在运动
// 子类继承父类
class Child extends Person {
constructor (name:string) {
super(name); // 初始化父类的构造函数
}
run ():void {
console.log(`${this.name}在运动--子类`);
}
work ():void {
console.log(`${this.name}工作--子类`);
}
}
let c = new Child('周六');
c.run(); // 周六在运动--子类
c.work(); // 周六在工作--子类
类里面的修饰符
Typescript 里面定义属性的时候给我们提供了三种修饰符:
public:公有,在当前类里面、子类、类外面都可以访问
protected:保护类型,在当前类里面、子类里面可以访问,在类外部没法访问
private:私有,在当前类里面可以访问,子类、类外部都没法访问
属性如果不加修饰符,默认就是公有(public)public:公有,在当前类里面、子类、类外面都可以访问
class Person {
public name:string; // 公有
constructor (name:string) {
this.name = name;
}
run ():void {
console.log(`${this.name}在运动`); // 在类里能访问
}
}
let p = new Person('李四');
p.run();
console.log(p.name); // 在类外面能访问
class Child extends Person {
constructor (name:string) {
super(name);
}
run ():void {
console.log(`${this.name}在运动--子类`); // 子类能访问
}
}
let c = new Child('周六');
c.run(); // 周六在运动--子类
console.log(c.name); // 在类外面能访问
- protected:保护类型,在当前类里面、子类里面可以访问,在类外部没法访问
class Person {
protected name:string; // 保护
constructor (name:string) {
this.name = name;
}
run ():void {
console.log(`${this.name}在运动`); // 在类里能访问
}
}
let p = new Person('李四');
p.run();
// console.log(p.name); // 报错,在类外面不能访问
class Child extends Person {
constructor (name:string) {
super(name);
}
run ():void {
console.log(`${this.name}在运动--子类`); // 子类能访问
}
}
let c = new Child('周六');
c.run(); // 周六在运动--子类
// console.log(c.name); // 报错,在类外面能访问
- private:私有,在当前类里面可以访问,子类、类外部都没法访问
class Person {
private name:string; // 私有
constructor (name:string) {
this.name = name;
}
run ():void {
console.log(`${this.name}在运动`); // 在类里能访问
}
}
let p = new Person('李四');
p.run();
// console.log(p.name); // 报错,在类外面不能访问
class Child extends Person {
constructor (name:string) {
super(name);
}
run ():void {
// console.log(`${this.name}在运动--子类`); // 报错,子类能访问
}
}
let c = new Child('周六');
c.run(); // 周六在运动--子类
// console.log(c.name); // 报错,在类外面能访问
静态属性 静态方法
- ES5
function Person (name) {
this.name = name;
}
Person.age = 24; // 静态属性
Person.run = function () { // 静态方法
console.log(Person.age);
}
Person.run(); // 静态方法的调用
- jquery
$('#box').css('color', 'red'); // 实例方法
$.get('url', function () { // 静态方法
})
$(element) { // 实例
return new Base(element);
}
$.get = function (url, callback) { // 静态方法
}
function Base (element) {
this.element = element;
this.css = function (attr, value) {
this.element.style[attr] = value;
}
}
- ts
class Person {
public name:string; // 公有
public age:number = 25;
static sex:string = 'man'; // 静态属性
constructor (name:string) {
this.name = name;
}
public run ():void { // 公有方法
console.log(`${this.name}在运动`); // 在类里能访问
}
// 静态方法
static print ():void {
console.log(`静态方法,性别:${Person.sex}`);
}
}
// 静态属性和方法的调用
console.log(Person.sex);
Person.print(); // 静态方法,性别:man
多态
多态:父类定义一个方法不去实现,让继承它的子类去实现,每一个子类有不同的表现。
多态属于继承。
class Animal {
name:string;
constructor (name:string) {
this.name = name;
}
eat () { // 具体吃什么,不知道。具体吃什么,由继承它的子类去实现,每一个子类的表现不一样
console.log('吃的方法');
}
}
class Dog extends Animal {
constructor (name:string) {
super(name);
}
eat () { // 子类实现父类的 eat 方法
console.log(`${this.name}喜欢吃骨头`);
}
}
class Cat extends Animal {
constructor (name:string) {
super(name);
}
eat () { // 子类实现父类的 eat 方法
console.log(`${this.name}喜欢吃老鼠`);
}
}
抽象类
- Typescript 中的抽象类:它是提供其他类继承的基类,不能直接被实例化。
- 用
abstract
关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类(子类)中实现。 - abstract 抽象方法只能放在抽象类里面。
- 抽象类和抽象方法用来定义标准。比如:标准:Animal 这个类要求它的子类必须包含eat 方法。
// 抽象类,标准
abstract class Animal {
name:string;
constructor (name:string) {
this.name = name;
}
abstract eat ():any; // 抽象方法不包含具体实现并且必须在派生类中实现。
}
// let animal = new Animal(); // 错误,抽奖类不能被实例化
class Dog extends Animal {
constructor (name:string) {
super(name);
}
eat () { // 抽象类的子类必须实现抽象类里面的抽象方法
console.log(`${this.name}喜欢吃骨头`);
}
}
let dog = new Dog('小黑');
dog.eat();
Typescript 学习笔记五:类的更多相关文章
- 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 学习笔记三:函数
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Typescript 学习笔记一:介绍、安装、编译
前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...
- java之jvm学习笔记五(实践写自己的类装载器)
java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...
随机推荐
- 2、订单填写页面 /items/write?skuId=10&orderNo=201903211033410001
<template> <div class="write"> <div class="adr" v-if="addres ...
- 微探eventlet.monkey_patch
e ventlet.monkey_patch在运行时动态修改已有的代码,而不需要修改原始代码 在eventlet.monkey_patch中支持以下几种python原生库修改 eventlet.mon ...
- centos下通过pid查看进程的绝对路径的方法
例如: 我想要知道我执行中的mysql路径 netstat -nlp pid拿到15330,然后 cd /proc/15330 由于linux在启动一个进程时,会在/proc下创建一个以PID命名的文 ...
- Servlet中获取Spring管理的bean
描述: 在Servlet中调用Spring管理的接口,可以使Dao/Service/ServiceImpl. 前提是在调用的bean中有注解: @Repository("beanName&q ...
- cisco PBR
access-list 2000 permit ip 10.11.50.0 0.0.0.255 anyaccess-list 2001 permit ip 10.11.50.0 0.0.0.255 1 ...
- pythonj基础(六)函数初识
一.什么是函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以 ...
- Python中操作Redis
一 Rdis基本介绍 redis是一个key-value存储系统.它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set -- ...
- 三 分析easyswoole源码(启动服务&TableManager,略提及Cache工具的原理)
前文连接,讲了es是如何启动swoole服务的. 里面有一个工具类TableManager.这个类为了处理进程间数据共享.是对swoole_table的一层封装swoole_table一个基于共享内存 ...
- MySQL优化(二) 优化诀窍
一.索引的使用 (1)查询要使用索引最重要的条件是查询条件中的字段建立了索引: (2)下列几种情况可能使用到索引: <1> 对于创建的多列索引,只要查询条件使用了最坐边的列,索引一般就会被 ...
- Html5学习笔记:图片上传
图片上传是业务需求中常见的功能,最基础的是单图片的上传.比较复杂的多图片上传,都是基于单图片上传. Form表单上传 h5的原生表单上传图片,代码如下: <!DOCTYPE html> & ...