ts(typescript)面向对象之静态成员

类的静态成员不是ts提出的新语法,而是es6中里面提出的

含义: 静态成员是指,附着在类上的成员(属于某个构造函数的成员),在ts 中的表现是在类中使用 static修饰符进行修饰的成员。例如:

class User {// 静态属性static users: User[] = [];constructor(public username: string,public password: string) { }// 静态方法static login() {// do something}
}

回忆构造函数

在js中,构造函数也是函数,只是特殊的地方在于,构造函数相对于普通函数来说。使用new 的方式来创建,并且构造函数里面是有this的。这个this 的指向是当前构造函数的对象。而普通的函数的this的指向是指向全局window的。

如下例子:

function User(name, password){this.name = name;this.password = password;
}

上面是一个构造函数,构造函数里面默认是有this的,而且默认返回的是this.例如下面:

function A(){var this = {};// ... 中间有无数代码return this;
}

我们可以把上面的构造函数,实现最上面ts 的功能登录功能,登录是每一个用户都是同样的功能,因为我们可以放在构造函数的属性上,达到共享一个方法,节约内存。
代码如下:

function User(name, password){this.name = name;this.password = password;
}
User.users = [];
User.login = function(){// do something
}

上面的js 写的User类,构造函数,和最上面ts 实现的功能都是一样,我们也可以看一下ts 编译的结果,对比一下。

特性

静态方法中的this

通过上面的回忆构造函数,我们可以得出 es6 或者 ts 中类的static, static就是把成员挂在类上面,在创建类的时候是不能调用的,只有通过类的属性的方式来进行调用。

  • 实例方法中的this指向的是当前对象

  • 而静态方法中的this指向的是当前类

静态方法的实用性——单例模式

单例模式适用的范围是,整个系统只要有一个实例存在就行,是唯一个的。这样做的好处是每当使用的时候,不需要重写创建对象,浪费不必要的内存

ts 实现单例模式

经典单例模式

class User {private constructor() { }static singleStone: User | undefined = undefined;static createStone() {if (this.singleStone) {return this.singleStone;} else {this.singleStone = new User();return this.singleStone;}}}

ts特别版本的单例模式

使用构造函数私有化,单例只读属性即可。如下

class User {private constructor() { }static readonly singleStone: User = new User();
}

ts(typescript)面向对象之静态成员相关推荐

  1. ts(typescript)面向对象之索引器

    索引器 这个概念不是typescript 中提出的,而是c#中提出的 什么是索引器 我们都知道,ts 中 获取对象中的属性有好多种方式 通过点的方式来进行获取 通过属性表达式的方式进行获取 通过获取对 ...

  2. TypeScript class 的静态成员变量

    Static Members 类可能有静态成员. 这些成员与类的特定实例无关. 它们可以通过类构造函数对象本身访问: class MyClass {static x = 0;static printX ...

  3. ts(TypeScript)定义服务器返回数据类型

    ts(TypeScript)定义服务器返回数据类型 1.定义基本返回类型 export type JSONResponse = {stat: string;msg?: string; }; stat: ...

  4. TS | typescript与JavaScript的异同

    文章目录 前言 typescript 特点 javascript 进化 typescript 局限与解决 前言 随着前段工程化的深入,引入强类型和更多面向对象方法的typescript逐渐被更多开发者 ...

  5. Vue3+Ant-design项目启用ts/typescript

    Ant-design官方文档提供了js和ts两种案例,按照文档给项目install ant-design后写了个组件编译时发现只要加上`<script lang="ts"&g ...

  6. Typescript 面向对象

    面向对象 类 (class) static关键字可以定义类属性| 类方法(静态属性|静态方法) class Person {static age: number = 18static sayHe() ...

  7. ts(typescript): 报错

    元素隐式具有 "any" 类型,因为类型为 "string" interface startDay {lastSevenDate: stringstartOfM ...

  8. Typescript面向对象---上篇

    目录 面向对象介绍 类(class) 构造器(构造函数)及this指向 类的继承 super关键字 公共.私有.受保护 修饰符 readonly 修饰符 参数属性 静态属性 静态方法 属性存取器(ge ...

  9. [ts]typescript高阶之typeof使用

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 typescript高阶:typeof使用 前言 一.typeof与对象结合使用 二.typeof与枚举结合使用 三.typeof与c ...

最新文章

  1. 如何让AI教机器自己玩俄罗斯方块?
  2. string来存放二进制数据
  3. 探索MySQL高可用架构之MHA(6)
  4. Simulink中进行电容充放电的一种简单仿真
  5. 火狐浏览器刷新ctrl+F5
  6. java-多线程知识
  7. yum mysql 如何启动_CentOS7用yum安装MySQL与启动
  8. php 生成随机数组,利用php如何获取随机数组列表
  9. php获取两个字符,php获取两个字符串之间的子字符串
  10. ps去水印教程_ps怎么去水印?ps去水印的三种方法
  11. xp服务器文件写保护怎么删除,winxp系统复制文件提示“请去掉写保护或使用另一张磁盘”的解决...
  12. 关于使用Python——写模拟手机通讯录查询系统
  13. Unity切割图片:把一张图片中的物体裁成多个单独的游戏物体
  14. android 一分钟倒计时动画,Android View篇之启动页倒计时动画的实现
  15. python精通能赚钱吗_月入3千到月入10万,精通数据分析的人到底有多赚?
  16. CF581B Luxurious Houses 模拟
  17. 利用AVISPA证明D2D协议
  18. Eclipse 创建JavaWeb工程
  19. rust 飞天指令_腐蚀RUST代码大全 腐蚀RUST指令代码一览
  20. vss 2005 手册

热门文章

  1. 隐藏的增长动力:中国工业的售后服务
  2. 我们的产品终于入驻淘宝服务市场
  3. 为什么示波器阻抗一般是1M欧或者50欧
  4. 自动驾驶【常用ADAS术语】
  5. pandas.read_csv读取csv文件遇到UnicodeDecodeError: ‘utf-8‘ codec can‘t decode bytes
  6. java 如何添加背景音乐_Java JFrame 中添加背景音乐方法
  7. android位置闹钟测试图,位置闹钟安卓版
  8. ERP : 物料控制--独立需求
  9. 工作20年,我才明白这4个职场真相
  10. python人文社科研究_人文社科实证研究中问题与模型的关系