JavaScript中的设计模式

目录

1.工厂模式

2.构造函数模式

构造函数中new关键字作用:

3.原型模式

4.组合模式


JavaScript中有四种常见的设计模式 ,目的是为了批量创建对象 为了实现继承。

1.工厂模式

利用工厂模式批量创建对象 
    优点:可以批量创建对象 
    缺点:无法区分种类,创建实例对象都是Object实例,方法冗余

var sayName = function(){
  console.log(this.name)
};//b1001
function Person(name,age,gender){
  return {
    name:name,
    age:age,
    gender:gender,
    sayName:sayName
  }
}
var p1 = Person('terry',12,'male');
var p2 = Person('larry',18,'female');
console.log(p1,p2);
p1.sayName();
p2.sayName();
console.log(p1.sayName===p2.sayName);

function Animal(){
  return {

  }
}
var a1 = Animal();
console.log(a1);

 代码运行结果如下:



2.构造函数模式

    优点:可以批量创建对象 可以区分种类 Person{} Animal{}
    缺点:无法解决方法冗余 

var sayName = function(){
  console.log(this.name)
}
function Person(name,age,gender){
  // new Object() new Array()
  this.name = name;
  this.age = age;
  this.gender = gender;
  this.sayName = sayName;
}
var p1 = new Person('terry',12,'male');
var p2 = new Person('larry',18,'female');
console.log(p1,p2);
console.log(p1.sayName===p2.sayName);
p1.sayName();
p2.sayName();

function Animal(){

}
var a1 = new Animal();
console.log(a1);
构造函数中new关键字作用:

        1.创建一个Person对应的实例 
        2.将this指向实例对象
        3.执行函数体代码
        4.返回实例对象

代码运行结果如下:


3.原型模式

    不单独使用    构造函数不做任何处理将实例所有属性和方法全部写在原型对象中

        优点:可以区分种类 可以批量创建对象 方法不冗余

        缺点:所有实例方法和属性一样

function Person(){};
Person.prototype.name = 'lisi';
Person.prototype.age = 12;
Person.prototype.gender = 'male';
Person.prototype.sayName = function(){
  console.log(this.name);
};
Person.prototype.firends = [];
var p1 = new Person();
var p2 = new Person();
console.log(p1,p2);
console.log(p1.name,p2.name,p1.sayName(),p2.sayName());
p1.firends.push('tom');
console.log(p1.firends,p2.firends);

代码运行结果如下:
 


4.组合模式

      构造函数模式 + 原型模式
      将实例私有属性和私有方法放在构造函数中
      将实例公共属性和公共方法放在原型对象中

function Person(name,age,gender,weight){
  // 私有属性
  this.name = name;
  this.age = age;
  this.gender = gender;
  // 私有方法
  this.weight = function(){
    console.log(weight)
  }
}
// // 公共方法
// Person.prototype.sayName = function(){
//   console.log(this.name);
// }
// // 公共属性
// Person.prototype.type = 'Person实例';
// 简化上述代码
Person.prototype = {
  // 将构造者改为Person 
  constructor:Person,
  sayName:function(){
    console.log(this.name)
  },
  type:'Person实例'
};

var p1 = new Person('terry',16,'male','40kg');
var p2 = new Person('larry',18,'female','60kg');
p1.sayName();
p2.sayName();
console.log(p1.sayName === p2.sayName,p1.type === p2.type);
console.log(p1.type,p2.type);
p1.weight();
p2.weight();
console.log(p1.weight === p2.weight);
console.log(p1.constructor,p2.constructor);

// instanceof 检测实例在不在原型链中 是否是构造函数实例
console.log(p1 instanceof Person);
console.log(p1 instanceof Object);
console.log(p1 instanceof Array);
console.log(Person instanceof Object);

function Animal(){};
console.log(Animal instanceof Object);

代码运行结果如下:


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

苹果录音删除了可以恢复吗?请收藏好这些方法!

录音可以用于记录重要的信息,比如会议记录、课堂讲解、创作灵感等等。通过录制好的音频,我们可以随时回放这些录音,以便后续参考和使用。 但难免会发生意外,我们有时候可能会不小心删除手机中的录音文件。苹果录音删除了可以恢复…

bootstarp+springboot基于Java的教学仪器设备商城销售网站_o9b00

1、商品分类功能 商品分类是教学仪器设备销售网站中十分重要的一部分,它能够提高用户在网站上的浏览速度,并方便用户快速找到自己需要的商品。因此,需要对该功能进行分析和设计,确保其体验性、可用性和易用性。可以将商品分为多个…

如何配置ESB单据集成接口

ESB企业服务总线在实际项目中主要用于各业务系统之间的集成,集成包括数据集成、应用集成以及业务单据集成等,ESB企业服务总线主要包含三部分:ESB设计器、SMC管理控制台以及Server运行环境,ESB设计器用于服务以及集成流程的开发&am…

04-React脚手架 集成Axios

初始化React脚手架 前期准备 1.脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 1.包含了所有需要的配置(语法检查、jsx编译、devServer…)2.下载好了所有相关的依赖3.可以直接运行一个简单效果 2.react提供了一个用于创建react项目的脚手架库…

python -opencv形态学操作

python -opencv形态学操作 1.服饰和膨胀 1.服饰和膨胀 opencv 腐蚀通过cv2.erode实现,膨胀通过cv2.dilate实现,看一下下面代码: from ctypes.wintypes import SIZE from multiprocessing.pool import IMapUnorderedIterator import cv2 i…

springboot+bootstarp+jsp房屋租赁系统ssm_t65a9

小型房屋租赁系统主要有管理员、房东和租户三个功能模块。以下将对这三个功能的作用进行详情的剖析。 管理员模块:管理员是系统中的核心用户,管理员登录后,可以对后台系统进行管理。主要功能有个人中心、房东管理、租户管理、房源城市管理、房…

VS Code 使用python快捷键

VS Code 快捷键大全 官方地址:https://code.visualstudio.com。 CtrlShiftP 搜索任意插件(最重要的快捷键)CtrlF5 运行代码 1、通用 CtrlShifP , F1 打开命令面板 CtrlP 快速打开 CtrlShiftN 打开新实例窗口 CtrlShiftW 关闭窗口实例 2、…

实时云渲染 助力破解智慧园区痛点困局

智慧园区是运用先进的信息技术,如物联网(IoT)、大数据、云计算、人工智能、三维可视化等,对园区内的各类设施、资源以及管理进行智能化和数字化升级。其目标是通过科技手段提升园区的运营效率、资源利用率,提供更便捷、…

推荐系统概述(PPT)

参考资料: 推荐系统系列之推荐系统概览(上) | 亚马逊AWS官方博客推荐系统系列之推荐系统概览(下) | 亚马逊AWS官方博客 目录如下: 推荐系统简介 推荐系统中常见概念 推荐系统中常用的评价指标 首页推荐…

算法---腐烂的橘子

题目 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到单元格…

深度之眼Paper带读笔记GNN.08.GCN(下)

文章目录 前言细节四:卷积核介绍图卷积核初代目图卷积核二代目契比雪夫多项式例子小结 GCN公式推导 实验设置和结果分析数据集节点分类任务消息传递方式比较运行效率 总结关键点创新点启发点 代码复现train.pyutil.pymodel.pylayer.py 作业 前言 本课程来自深度之眼…

DC电源模块检测故障步骤有哪些

BOSHIDA DC电源模块检测故障步骤有哪些 DC电源模块检测故障步骤如下: 1. 检查输入电压:用万用表测量输入电压,确保其在规定范围内。 2. 检查输出电压:用万用表或示波器测量输出电压,确保其在规定范围内。 3. 检查输…

电机应用开发-直流有刷电机速度环控制实现

直流有刷电机速度环控制实现 硬件设计 可选:L298N电机驱动板、野火MOS搭建的驱动板。 直流电机速度环控制-位置式PID实现 编程要点 配置定时器可以输出PWM控制电机 配置定时器可以读取编码器的计数值 配置基本定时器可以产生定时中断来执行PID运算 编写位置式PID算…

Speech | openSMILE语音特征提取工具

官方地址:openSMILE 3.0 - audEERING 使用指导:openSMILE — openSMILE Documentation (audeering.github.io) openSMILE 简介 openSMILE是一款以命令行形式运行的工具,通过配置config文件来提取音频特征。主要应用于语音识别、情感计算、音…

请求的接口响应状态为已取消的原因

有趣的iframe问题 今天遇到一个问题,当点击了按钮----跳转页面时----F12键点击网络中的状态报了已取消,类型是 document说明是前端页面的问题,如果是xhr那可能是接口的问题。 原本是写了3个iframe,页面刷新的时候请求了第一个iframe,然后就…

centos7 怎么让命令行显示中文(英文->中文)

要让CentOS 7命令行显示中文,您需要确保您的系统支持中文字符集,并在命令行中设置正确的语言环境。以下是设置中文字符集和语言环境的步骤: 首先,确保您的系统已经安装了中文字体。在终端中运行以下命令来查看安装的中文字体&…

使用ExLlamaV2量化并运行EXL2模型

量化大型语言模型(llm)是减少这些模型大小和加快推理速度的最流行的方法。在这些技术中,GPTQ在gpu上提供了惊人的性能。与非量化模型相比,该方法使用的VRAM几乎减少了3倍,同时提供了相似的精度水平和更快的生成速度。 ExLlamaV2是一个旨在从…

IDEA-SVN合并分支到主干

IDEA-SVN合并branch分支到主干master 1.选择VCS的 Integrate Project 2.选择分支合并 Source1 是合并后的分支 , 主分支 master Source2 是被合并的分支 , 分支 branch Try merge 可以尝试是否可以能够被合并,并且无冲突 3.合并完成后当前项目会出现需要提交的内容,检查一…

从传统到智能 | 拓世法宝AI智能直播一体机为商家注入活力

2023年即将结束,直播仍然是商业舞台上的主旋律,本地生活也不例外。据数据显示,到2022年,中国本地生活服务市场规模已经达到29.8万亿元,而预计到2025年,这一数字将继续攀升至35.3万亿元。伴随着当地生活直播…

Walrus 入门教程:如何创建模板以沉淀可复用的团队最佳实践

模板是 Walrus 的核心功能之一,模板创建完成后用户可以重复使用,并在使用过程中逐渐沉淀研发和运维团队的最佳实践,进一步简化服务及资源的部署。用户可以使用 HCL 语言自定义创建模板,也可以一键复用 Terraform 社区中上万个成熟…