【设计模式】构造器模式和原型模式

server/2024/9/22 21:18:40/

构造器模式

如果我们系统中有多个员工,创建每一个员工都需要 new 一下,出现很多重复代码,所以我们可以将他们写成一个构造函数,然后通过传入的不同参数创建不同的员工。

function Employee(name, age) {this.name = namethis.age = agethis.toString = function() {return `name: ${this.name}, age: ${this.age}`}
}const employee1 = new Employee('张三', 18)
console.log("=>(index.js:7) employee1", employee1); 
//=>(index.js:7) employee1 Employee { name: '张三', age: 18, toString: [Function (anonymous)] }

原型模式

以上代码中toString 方法,每次 new 一个对象都需要重新创建一个,而这个方法却是每一个 Employee 共有的,所以能不能把这个方法提取到一个公共的地方捏?

此时就需要我们使用原型模式,将 toString 方法挂载到 Employee 的原型上。

function Employee(name, age) {this.name = namethis.age = age
}Employee.prototype.toString = function () {return `name: ${this.name}, age: ${this.age}`
}const employee1 = new Employee('张三', 18)
console.log("=>(index.js:7) employee1", employee1);
//=>(index.js:7) employee1 Employee { name: '张三', age: 18 }
console.log(employee1.toString())
// name: 张三, age: 18

那假如我们使用 ES6 写法呢?

class Employee {constructor(name, age) {this.name = name;this.age = age;}toString() {return `name: ${this.name}, age: ${this.age}`}
}
const employee1 = new Employee('张三', 18)
console.log("=>(index.js:7) employee1", employee1);
//=>(index.js:7) employee1 Employee { name: '张三', age: 18 }
console.log(employee1.toString())
// name: 张三, age: 18

很神奇!toString 直接被挂载到原型上!

所以说,es6 类的写法同时兼顾了构造器模式和原型模式

应用场景有比如组件的复用,状态管理等。


http://www.ppmy.cn/server/104095.html

相关文章

leetcode 26 删除有序数组中的重复项

正文 本题使用双指针解法即可,右指针移动,若右指针所指向元素与左指针指向元素一致,右侧指针继续右移,若右指针指向元素与做左指针指向元素不一致,左指针位置 1,且令左指针处元素等于右指针处元素。 class…

使用docker compose一键部署 Portainer

使用docker compose一键部署 Portainer Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。 1、创建安装目录 mkdir /data/partainer/ -p && cd /data/partainer2、创建docker…

LeetCode216 组合总和 III

前言 题目: 216. 组合总和 III 文档: 代码随想录——组合总和 III 编程语言: C 解题状态: 成功解答 思路 组合题的变种,其实是变得更简单了,还是可以使用回溯法来解决。 代码 回溯法 class Solution { …

Windows All download

前言 微软家族产品下载HEU_KMS_Activator download Windows PC desktop download 微软官网all 地址,地址1国内镜像地址,地址1 Windows 常规使用,运维,部署csdn 专栏 ,付费专栏 参考 版本微软官网Windows 7,8,10,…

通过电影之镜,提升生活之美

在快节奏的现代生活中,电影不仅是娱乐的载体,更是提升审美情趣、拓宽视野的窗口。三部各具特色的经典之作——《布达佩斯大饭店》、《花样年华》与《天使爱美丽》,以其独特的视觉风格、深刻的情感表达与细腻的艺术构思,为我们展示…

Java设计模式原则及中介者模式研究

在软件开发过程中,设计模式作为解决常见设计问题的有效工具,对于提升代码质量、促进团队协作具有重要意义。本文系统地阐述了Java设计模式的六大基本原则——单一职责原则、开放封闭原则、里氏替换原则、依赖倒置原则、接口隔离原则以及迪米特法则&#…

“2025深圳电子信息展”带您感受科技创新如何改变世界

深圳,这座位于中国南海之滨的城市,自改革开放以来,便以惊人的速度崛起,成为了全球瞩目的经济特区与创新高地。被誉为“中国的硅谷”,深圳不仅是中国科技创新的重要引擎,更是高新技术产业的璀璨明珠&#xf…

编程学习中的挫折与突破:走出Bug的迷宫

在编程学习的道路上,挫折感就像一道道难以逾越的高墙,让许多人望而却步。然而,真正的编程高手都曾在这条路上跌倒过、迷茫过,却最终找到了突破的方法。面对复杂的算法和调试难题,我们如何在Bug的迷宫中找到出口&#x…