TypeScript17:静态成员

一、什么是静态成员

静态成员是指,附着在类上的成员(属于某个构造函数的成员)

class User {constructor(public loginId: string,public loginPwd: string,public name: string,public age: number) { }static login(loginId: string,loginPwd: string): User | undefined {console.log('login');return undefined}
}
const result = User.login('admin', '123456'); // login

使用 static 修饰的成员是静态成员,可以直接用类名调用。

实例成员:对象成员,属于某个类的对象;

静态成员:非实例成员,属于某个类。

class User {static users:User[] = []constructor(public loginId: string,public loginPwd: string,public name: string,public age: number) { // 需要将新建的用户加入到数组中User.users.push(this)}static login(loginId: string,loginPwd: string): User | undefined {console.log('login');return User.users.find(u => u.loginId === loginId && u.loginPwd === loginPwd)}sayHello() {console.log(`大家好,我叫${this.name},今年${this.age}岁,我的账号是${this.loginId}`);}
}
const u1 = new User('u1', '123','张三',12); // 新建一个用户
const u2 = new User('u2', '123','李四',13); // 新建一个用户
const u3 = new User('u3', '123', '王二麻', 14); // 新建一个用户
const result = User.login('u1', '123'); // 模拟登录
if (result) {result.sayHello() // 大家好,我叫张三,今年12岁,我的账号是u1
} else { console.log('登录失败');
}

上面代码中, User 作为一个用户类,每新建一个用户需要通过 new 方法来创建。

新建的用户需要在类内部保存到数组中, 以便登陆时通过 login 来校验账户和密码,这时的 users 应为一个静态成员。如果为一个实例成员,则会导致每创建一个用户, users 的值都会发生变化,无法进行登录校验。

二、静态方法中的 this

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

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

上面例子中,类中的登录方法可以通过 this 访问 users ,效果一致。

static login(loginId: string,loginPwd: string): User | undefined {return this.users.find(u => u.loginId === loginId && u.loginPwd === loginPwd)
}

三、设计模式:单例模式 

单例模式:某些类的对象,在系统中最多只能有一个,为了避免开发者造成随意创建多个类对象的错误,可以使用单例模式进行强约束。

通过静态方法创建一个对象:  this 指向棋盘 Board 

class Board { width: number = 500;height: number = 700;init() { console.log("初始化棋盘");}private constructor() { }private static _board?: Board;static createBoard(): Board { // 判断私有的_board是不是已经有值,如果有值,返回该棋盘对象;// 如果没有值,新建一个棋盘对象返回if (this._board) {return this._board}this._board = new Board();return this._board;}
}
const board1 = Board.createBoard(); // 返回一个棋盘对象
const board2 = Board.createBoard(); // 返回一个棋盘对象
board1.init() // 初始化棋盘
console.log( board1 === board2); // true
class Board { width: number = 500;height: number = 700;init() { console.log("初始化棋盘");}private constructor() { }static readonly singleBoard = new Board();
}
const board1 = Board.singleBoard; // 返回一个棋盘对象
const board2 = Board.singleBoard; // 返回一个棋盘对象
board1.init() // 初始化棋盘
console.log( board1 === board2); // true

区别:下面这种写法在最开始就创建棋盘,而不是在需要的时候创建;创建棋盘时候没有办法写很多代码,例如异步等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/817501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab p文件解密 p文件转m文件

matlab p文件解密 将p文件转m文件 收费:1元/个p文件,多个文件优惠; 不成功不收费 qq联系 3338714180 注: MATLAB 的p 文件通常是 MATLAB 的函数m文件,但是经过编译后变成了 p 文件,使其无法直接查看或…

几款高效在线文档编辑器推荐,编辑文档更轻松

在数字化时代,文档编辑工作变得越来越重要。无论是工作报告、学习笔记还是创意文稿,一个优秀的在线文档编辑器都能让你的工作事半功倍。现在市面上也有很多优秀的在线文档编辑器,比如WPS Office、腾讯文档、 Microsoft Word Online。今天&…

openGauss_5.0.1 企业版安装及问题记录(CentOS系统):主备模式服务器安装

目录 📚第一章 官方地址📗安装包下载地址📗文档指南 📚第二章 安装📗准备工作📗开始安装📕创建XML配置文件📕初始化安装环境📕执行安装📕验证 📚第…

【数据结构】第三节:单链表

前言 本篇要求掌握的C语言基础知识:指针、结构体 目录 前言 单链表 概念 对比链表和顺序表 创建链表 实现单链表 准备工作 打印链表 创建节点并初始化 尾插 二级指针的调用 尾插代码 头插 尾删 头删 查找(返回节点) 在指定位…

C#硬件接口开发------一文了解WMI

🎈个人主页:靓仔很忙i 💻B 站主页:👉B站👈 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:C# 硬件接口开发 🤝希望本文对您有所裨益,如有不足…

优优嗨聚集团:如何优雅地解决个人债务问题,一步步走向财务自由

在快节奏的现代生活中,个人债务问题似乎已成为许多人不得不面对的挑战。正确处理个人债务,不仅关系到个人信用和财务状况,更是实现财务自由的重要一步。本文将为您提供一些实用的建议,帮助您优雅地解决个人债务问题,走…

设计模式之备忘录模式(下)

3)实现多次撤销 1.结构图 对负责人类MementoCaretaker进行了修改,在其中定义了一个ArrayList类型的集合对象来存储多个备忘录。 2.代码实现 import java.util.*;public class MementoCaretaker {//定义一个集合来存储多个备忘录private ArrayList mem…

vue脚手架介绍

当谈论现代的前端开发框架时,Vue.js 无疑是一个备受瞩目的话题。Vue.js 是一个渐进式 JavaScript 框架,专注于构建用户界面。它的核心库只关注视图层,并且易于使用和集成到其他项目中。在实际项目中,我们经常使用 Vue CLI&#xf…

学员分享丨十年架构师感悟:敢于“提出问题”

最近呢小誉收到了一位工作十年的学员投稿,这位学员是2011年从誉天学习HCIE课程并顺利拿证,先后在华为等大厂工作。他想把他这十年的工作经验分享给各位学弟学妹们。 这些经验并非来自于具体的技术实现,而是在架构设计和实施过程中所体会到的一…

Github 2024-04-09 Python开源项目日报 Top10

根据Github Trendings的统计,今日(2024-04-09统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10Vue项目1JavaScript项目1系统设计指南 创建周期:2507 天开发语言:Python协议类型:OtherStar数量:241693 个Fork数量:42010 次…

pandas 读取csv 数据 read_csv 参数详解

前言 Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 主要引入了两种新…

C++生成动态库,C++和C#以及Java在windows和linux调用

Windows生成dllC库 1、创建动态链接库项目 源文件编写函数 // dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h"int sum(int a, int b) {return a b; }BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) {switch…

【LAMMPS学习】八、基础知识(1.8)键的断裂

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

【Linux】手搓shell

手搓shell 代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <ctype.h> #include <sys/stat.h> #…

取出/var/log/secure中一小时内登录失败超过三次的IP

取出/var/log/secure中一小时内登录失败超过三次的IP 前两个字段是日期&#xff0c;第三个字段是小时&#xff0c;第四个字段是IP cat /var/log/secure | sort -i | awk -F [ :] /Failed/{a[$1" "$2" "$3" "$4" "$(NF-3)]}END{for(i …

使用 Python 实现复制粘贴的功能

pandas 里面有一个 pd.read_clipboard 函数&#xff0c;可以根据你复制的内容生成DataFrame。是的&#xff0c;就是我们平时选中&#xff0c;然后 CtrlC 时拷贝的内容。所以比较神奇&#xff0c;那么 pandas 到底是怎么做到的&#xff0c;它是怎么读出我们使用 Ctrl C 复制的内…

Python学习笔记(三)

一、使用朴素贝叶斯制作鸢尾花数据模型 from sklearn.preprocessing import StandardScaler from sklearn.naive_bayes import MultinomialNB from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.feature_extraction…

【面试题】s += 1 和 s = s + 1的区别

文章目录 1.问题2.发现过程3.解析 1.问题 以下两个程序真的完全等同吗&#xff1f; short s 0; s 1; short s 0; s s 1; 2.发现过程 初看s 1 和 s s 1好像是等价的&#xff0c;没有什么区别。很长一段时间内我也是这么觉得&#xff0c;因为当时学习c语言的时候教科书…

更优性能与性价比,从自建 ELK 迁移到 SLS 开始

作者&#xff1a;荆磊 背景 ELK (Elasticsearch、Logstash、Kibana) 是当下开源领域主流的日志解决方案&#xff0c;在可观测场景下有比较广泛的应用。 随着数字化进程加速&#xff0c;机器数据日志增加&#xff0c;自建 ELK 在面临大规模数据、查询性能等方面有较多问题和挑…

【简单讲解如何安装与配置Composer】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…