当前位置: 首页 > news >正文

JavaScript设计模式(一)——构造器模式、原型模式、类模式

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js🍒Three.js 🍖JS版算法
🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

文章目录

    • ✨✨前言
    • 一、构造器模式
    • 二、原型模式
    • 三、类模式
    • 🎉🎉本篇小结


✨✨前言

大家好,这里是前端杂货铺。

软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

接下来,我们进入对设计模式的初步探索…

一、构造器模式

函数构造器就是可以用来构建生成新的函数或者对象的函数。

举个栗子:对于公司来说,每招进来一个人,公司负责人就要写一个人的信息,如果公司招进来100个人,就需要写100次,很是麻烦。

let employee1 = {name: '前端杂货铺',age: 22,
}let employee2 = {name: '后端杂货铺',age: 25
}
......let employee100 = {name: '全端杂货铺',age: 35
}

我们利用构造器模式,就可以先封装一个 Employee 方法,招进来一个人创建一个实例就可以了,很是方便。

function Employee(name, age) {this.name = name;this.age = age;this.info = function() {console.log(this.name + '-' + this.age);}
}let employee1 = new Employee('前端杂货铺', 22);
console.log(employee1);
employee1.info();let employee2 = new Employee('后端杂货铺', 25);
console.log(employee2);
employee2.info();
......let employee100 = new Employee('全端杂货铺', 35);
console.log(employee100);
employee100.info();

在这里插入图片描述

弊端:对于 name 和 age 这两个属性,每次创建实例的时候都需要在内存中开辟空间进行存储是理所当然的,但是对于 info() 方法属实是没有必要每次都在内存中开辟空间进行存储。当数据量过大时,对内存来说无疑是一种负担,会导致一定的性能问题。


二、原型模式

很简单,我们只需要把上述的 info() 方法拿出来挂到 Employee 的原型上就可以实现原型模式,进而就解决构造器模式的弊端了。

function Employee(name, age) {this.name = name;this.age = age;
}Employee.prototype.info = function() {console.log(this.name + '-' + this.age);
}let employee1 = new Employee('前端杂货铺', 22);
console.log(employee1)
employee1.info();let employee2 = new Employee('后端杂货铺', 25)
console.log(employee2)
employee2.info();
...let employee100 = new Employee('全端杂货铺', 35)
console.log(employee100)
employee2.info();

在这里插入图片描述


三、类模式

在 ES6 推出之后,类模式相当于合并了构造器模式和原型模式。

constructor 是一种 用于创建和初始化 class 创建的对象的特殊方法。

在一个类中 只能有一个 名为 “constructor” 的特殊方法。如果我们没有显示指定构造函数,则会添加默认的 constructor 方法。如果不指定一个构造函数方法,则使用一个默认的构造函数。

class Employee {constructor(name, age) {this.name = name;this.age = age;}info() {console.log(this.name + '-', this.name);}
}let employee1 = new Employee('前端杂货铺', 22);
let employee2 = new Employee('后端杂货铺', 25);
......
let employee100 = new Employee('全端杂货铺', 35);console.log(employee1);
console.log(employee2);
......
console.log(employee100);

在这里插入图片描述


🎉🎉本篇小结

本篇文章我们初步探讨了设计模式。

我们明白了构造器模式和原型模式的优缺点以及用途。ES6 的 class 类模式,完美的对构造器模式和原型模式进行了合并和兼容。

好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!


参考资料:

  1. MDN 官方文档
  2. 百度百科 · 软件设计模式(设计模式)
  3. JavaScript设计模式 【作者:千锋教育】

在这里插入图片描述


相关文章:

JavaScript设计模式(一)——构造器模式、原型模式、类模式

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...

python 读文件,跳过有问题的那行

报错: UnicodeDecodeError: gbk codec cant decode byte 0xfa in position 4781: illegal multibyte sequence 解决方案: f open("20091012134152.txt", encoding"gbk", mode"r") 改成 f open("20091012134152.tx…...

Spring Boot Actuator的Env端点存在本地文件包含(LFI)漏洞CVE-2020-5421

文章目录 0.前言1.参考文档2.基础介绍3.漏洞利用原理3.解决方案1. 升级Spring Boot版本2. 限制端点的访问3. 禁用环境端点4. 不公开敏感的Actuator端点5. 开启安全审计 0.前言 背景: Spring Boot Actuator的Env端点存在本地文件包含(LFI)漏洞CVE-2020-5421。被扫描到…...

Leetcode 最后一个单词的长度

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 输入:s “Hello World” 输出:5 解释&a…...

css ,less和sass的区别[简洁易懂

CSS、Less和Sass都是用于样式表编写和管理的技术,它们之间有以下区别: CSS(层叠样式表)是一种标准的样式表语言,用于描述网页的外观和样式。它是前端开发中最基础和常用的技术,所有网页都需要使用CSS来定义…...

有了ChatGPT的帮助,开发者的生产力会提高10-100倍

在过去的几十年里,可以说没有哪个领域像软件开发那样,以如此激进的方式发展。相关的技术层出不穷,速度惊人,生成式人工智能的出现更是将让这些发展继续加速。 尽管有些人猜测生成式人工智能产品将会终结软件开发这个人类职业&am…...

win10+QT5.15+cryptopp562 完整配置开发

1、准备如下几项内容: a、WIN10环境下的QT5.15.2安装包,QTCreator对应版本安装。(自行安装) b、cryptopp562安装包下载,官网:https://www.cryptopp.com/,这里没选择最新的8.7是因为mingw-32编译…...

多线程学习之多线程的案例

练习一:赠送礼物 需求:有100份礼品,两人同时发送,当剩下的礼品小于10份的时候则不再送出。利用多线程模拟该过程并将线程的名字和礼物的剩余数量打印出来. 示例: public class MyRunable implements Runnable {//第二种方式实现…...

iTOP-RK3588开发板Android12 设置系统默认不休眠

修改文件&#xff1a; device/rockchip/rk3588/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults. xml 文件&#xff0c;如下图所示&#xff1a; - <integer name"def_screen_off_timeout">60000</integer> <integer name&q…...

java系统问题定位思路

一、在不同环境排查问题&#xff0c;有不同的方式 1、如果是在自己的开发环境排查问题&#xff0c;那你几乎可以使用任何自己熟悉的工具来排查&#xff0c;甚至可以进行单步调试。只要问题能重现&#xff0c;排查就不会太困难&#xff0c;最多就是把程序调试到 JDK 或三方类库内…...

redis jedis 单元测试 报错集锦 汇总 junit

redis报错汇总 在单元测试时&#xff0c;使用jedis通常遇到如下报错&#xff1a; 实例化报错->连接报错->权限报错。此报错是有顺序的&#xff1a;例如&#xff0c;若连接报错&#xff0c;说明实例化完成&#xff0c;即配置文件配对了。若权限报错&#xff0c;说明连接…...

AMEYA360:兆易创新获得ISO 26262 ASIL D流程认证, 汽车功能安全管理体系再上新台阶

中国北京(2023年8月29日) —— 业界半导体器件供应商兆易创新GigaDevice(股票代码 603986)今日宣布&#xff0c;获得由国际公认的测试、检验和认证机构通标标准技术服务有限公司(以下简称SGS)授予的ISO 26262:2018汽车功能安全最高等级ASIL D流程认证证书&#xff0c;这标志着兆…...

MySQL binlog的几种日志录入格式以及区别

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…...

C# 案例题

1. // # hello world using System; namespace HelloWorldApplication {class HelloWorld{static void Main(string[] args) {/*my first C# program*/Console.WriteLine("HelloWorld C#");Console.ReadKey();}} } 2. // C# 计算矩形的面积 /*计…...

拒绝摆烂!C语言练习打卡第七天

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;每日一练 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、选择题 &#x1f4dd;1.第一题 &#x1f4dd;2.第二题 &#x1f4d…...

【动态规划】状态压缩dp

【动态规划】状态压缩dp...

Java eight 解读流(Stream)、文件(File)、IO和异常处理的使用方法

目录 Java 流(Stream)、文件(File)和IO读取控制台输入读写文件FileInputStreamFileOutputStream Java目录 Java 异常处理 Java 流(Stream)、文件(File)和IO java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。 Java.io 包中的流支持很多种…...

胜券汇:行业持续轮动 缺乏主线下关注反转预期的方向

前史行情4年一轮回&#xff0c;中心在于微观环境的类似性。首要&#xff0c;复盘前史&#xff0c;2016-2019年和2020年至今的行情走势较为类似&#xff0c;历经约1年半的长牛&#xff0c;约1年的长熊&#xff0c;阅历1个季度快速反弹后继续约3个季度的震动期。其次&#xff0c;…...

java+ssm+mysql农场信息管理系统

项目介绍&#xff1a; 本系统为基于jspssmmysql的农场信息管理系统&#xff0c;功能如下&#xff1a; 用户&#xff1a;注册登录系统&#xff0c;菜地信息管理&#xff0c;农作物信息管理&#xff0c;种植信息管理&#xff0c;客户信息管理&#xff0c;商家信息管理&#xff…...

【App出海成功案例】 | NetMarvel 帮助广告主ARPU增长45%,ECPM增长50%,付费率涨幅30%

中国App何以扬帆出海&#xff1f; 出海热发展到今天&#xff0c;中国App席卷西方世界的神话被一一打造&#xff0c;手游/非游双面开花&#xff0c;成功案例作为赛道代表&#xff0c;也成为众多出海广告主一一效仿的风向标。 它们在用户增长、变现收益上的打法是怎样的&#x…...

彻底清除TortoiseSVN:从基础卸载到深度清理全指南

1. 为什么TortoiseSVN卸载这么麻烦&#xff1f; 很多朋友第一次卸载TortoiseSVN时都会遇到各种"后遗症"——右键菜单残留、注册表垃圾、文件夹图标异常。这其实和它的工作原理有关。TortoiseSVN作为Windows资源管理器的Shell扩展&#xff0c;会深度集成到系统底层。我…...

工业机器人嵌入式系统建模与自动化工具项目三基于RAPID指令的故障排查与项目实施

目录 一、 项目背景与研发目标 1.1 项目研发背景 1.2 项目核心目标 二、 项目全周期进展 2.1 需求分析与环境搭建阶段&#xff08;完成度100%&#xff09; 2.2 核心模块编码开发阶段&#xff08;完成度100%&#xff09; 2.3 功能调试阶段&#xff08;核心故障爆发…...

OpenClaw性能优化:千问3.5-9B模型加速30%的秘诀

OpenClaw性能优化&#xff1a;千问3.5-9B模型加速30%的秘诀 1. 为什么需要优化OpenClaw性能 第一次用OpenClaw执行自动化任务时&#xff0c;我遇到了一个尴尬的问题——点击"整理桌面文件"指令后&#xff0c;系统整整思考了15秒才开始移动第一个文件。这种延迟在简…...

28-模块四-AI代码审核实战 第28讲-代码质量评分体系 - 可维护性 可读性 可测试性的量化指标

本讲目标:理解「量化指标」如何把主观感受变成可治理信号;掌握从 Python AST 计算圈复杂度与认知复杂度的基本方法;实现可配置权重的 QualityScorer、历史趋势与团队基准对比接口;输出 JSON 与 Markdown 双语报告,嵌入 CodeSentinel 审核结论。本讲强调可解释:每个分数都…...

一篇大模型Agents工作流优化最新综述

过去&#xff0c;人们总希望一个LLM直接把任务做完&#xff1b;现在&#xff0c;一个更现实的方向正在浮现——针对不同任务设计不同工作流&#xff0c;并让系统在执行前、执行中乃至执行后持续优化这条链路。 近日&#xff0c;Rensselaer Polytechnic Institute&#xff08;RP…...

钢链数智,赋能实业——千匠网络钢铁产业电商系统,破解行业困局,激活钢铁增长新动能

钢铁行业作为国民经济的支柱产业&#xff0c;贯穿基建、制造、房地产、机械装备等核心领域&#xff0c;正处于从“规模扩张”向“质量提升”转型的关键阶段&#xff1a;从铁矿开采、冶炼轧制、钢材加工&#xff0c;到多级分销、终端采购、工程交付&#xff0c;全链路环节繁杂、…...

基于GOOSE - Transformer - LSTM的数据回归预测探索

基于GOOSE-Transformer-LSTM的数据回归预测 模型结合Transformer的全局注意力机制和LSTM的短期记忆及序列处理能力 首先&#xff0c;采用Transformer自注意力机制捕捉数据的全局依赖性&#xff0c;并输出一个经过全局上下文编码的表示&#xff1b;然后&#xff0c;采用2024年最…...

快速部署Python3.10环境:Miniconda镜像实战教学

快速部署Python3.10环境&#xff1a;Miniconda镜像实战教学 1. 为什么选择Miniconda搭建Python环境&#xff1f; 在Python开发中&#xff0c;最让人头疼的问题之一就是环境管理。不同项目可能需要不同版本的Python和依赖库&#xff0c;直接安装会导致版本冲突。Miniconda提供…...

SDXL 1.0电影级绘图工坊:RTX 4090专属,5分钟零基础部署教程

SDXL 1.0电影级绘图工坊&#xff1a;RTX 4090专属&#xff0c;5分钟零基础部署教程 1. 为什么选择SDXL 1.0电影级绘图工坊 如果你正在寻找一款能在RTX 4090上发挥极致性能的AI绘图工具&#xff0c;SDXL 1.0电影级绘图工坊绝对是你的不二之选。这款工具专为4090显卡优化&#…...

4款降AI率工具实测横评:最便宜和最贵的效果差多少?

花了几百块&#xff0c;测了一圈&#xff0c;现在把结果告诉你。 降AI率工具、降AI工具保姆级测评2026、降AI这个需求&#xff0c;不同工具之间差距其实挺明显的&#xff0c;不是"随便用一个都一样"。 我的结论&#xff1a;嘎嘎降AI&#xff08;www.aigcleaner.com…...