Javascript组件化开发设计思想

2023-11-16

一、引言

项目中经常用web弹层组件-layer,其常见的代码如下:

 

使用的时候很方便,弹窗的宽高、内容、标题、关闭按钮等弹窗的状态我们都可以通过配置参数配置。layer弹层组件用同一套代码来满足不同的弹窗层表现的需求,这便是组件开发的强大之处。

那么,什么是组件开发、为什么要采用这种开发形式、怎么进行组件化开发呢?下面就来一探究竟吧。

 

二、什么是组件化开发

当多组功能相同的对象,有不同的表现形式,即功能一样,但是不同的表现形式,比如弹窗,功能都是显示弹出层,但是弹出的位置、弹框的宽高不一样,这就是不同的表现形式,像上述这种情况就可以用组件开发,不必为同样功能的不同的状态都去写一套代码,这样可以节省代码。所以组件化开发也是代码复用的一种形式。

下面展示的是简单封装弹框组件的代码:

我们发现:

1. 代码中配置参数、默认参数都是用如下的json形式的对象,为什么要用json对象形式传参呢?

d1.init({ // 配置参数

w : 100,

h : 400,

dir : 'right',

title : '公告'

});

2. 代码中extend函数作用是什么,为什么需要这个extend函数呢?

这就涉及到下面的组件配置参数的原理了。

 

三、组件配置参数原理

组件配置参数原理

 

这里有一个问题:如何在alert(defaults.name)时,setting对象中配置了name,就用setting对象中的name属性,没有name属性就用默认的defaults里的name

这里我们可以利用对象的拷贝,如下对象的拷贝,将obj2对象进行拷贝赋给obj1:

为了达到上述效果,可以利用extend函数,extend( defaults , setting );

当setting里有name时,会将defaults里的name覆盖,当setting里没有name时,就用defautls里的name

组件开发中的参数配置就是用的这个原理。

 

另外如果不用对象的json格式进行传参,一个一个的传参,当参数特别多的时候会出现参数顺序的问题

解决这个问题可以利用对象的json格式的写法,以对象json的格式传入参数,这样就一个参数,解决了参数顺序的问题,不同的配置对应参数对象里的不同的属性。

 

四、组件的事件

上面演示了一个简单弹框组件的例子,简单并不正规,那么组件开发更正规的写法是什么呢?

比较正规的组件化开发将 配置参数、方法、事件三者进行分离;

如 JqueryUI的选项卡组件:把所有的配置选项拆分成了3部分:Options、Methods、Events

前两个Options、Methods,就是我们写的简单组件里的参数配置和加在原型里的方法,我们已经很熟悉了,那么Events是什么呢?

这个Events事件跟我们平时用的事件不一样,我们平时用的事件都是系统提供的。而组件开发的事件是自定义事件。

4.1 什么是自定义事件,如何创建自定义事件呢?

自定义事件 主要是跟函数有关系,就是让函数能够具备事件的某些特性,那么函数有什么问题,为什么函数必须具备一些事件特性才有利于多人协作呢?

思考下面一段代码:

 

出现的问题:不同人写的代码放在一个函数里,可能会写乱了,代码混淆了,变量也有可能冲突

多人协作时,如何解决这个问题呢?--最好的办法是大家分开来写,互不影响

我们其实想达到下面的这种情况

理想效果就是:大家都是分开来写的,并且最终执行的时候,三个同事的代码都能执行

但是问题是 函数有个特点:函数名相同的时候,函数会进行覆盖,调用show(),只能执行 同事3的代码

那么函数能够借鉴事件呢? -- 相同事件并不会覆盖,而是都会执行,伪代码形式如下:

 

4.2 原生js如何实现自定义事件

分析了自定义事件的原理后,可以看下原生js如何实现自定义事件的?如下代码:

接下来通过一个实际的例子:

通过上面的例子我们知道了,自定义事件特别有利于多人协作开发。这也是为什么要提取出自定义事件、从简单组件开发改成正规的组件开发。

 

五、组件的总结

组件是面向对象的深入应用,将配置参数、方法、事件三者进行分离。组件开发则是复用代码的一种形式,可以用同一套代码来满足不同的需求。

完整的组件化开发流程可参考基于JQ的选项卡组件代码,代码部分截图如下:

完整代码可见我的github:

https://github.com/pluscai/Component-based-development/blob/master/20tabs.html

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript组件化开发设计思想 的相关文章

  • 图解循环单链表(含C代码)

    目录 1什么是循环单链表 2好处是什么呢 3操作的差异 4代码 1什么是单向循环链表 单向循环链表对比单链表 其实只有一个地方的差异 那就是 尾结点的指针域不是指向空 而是指向了头结点 使其形成了一个环 2好处是什么呢 链表从链尾到链头很方

随机推荐

  • Windows内核面试题(持续更新,目前完成度30%约1.8万字)

    WINDOWS内核编程问题与答案 1 WDK和SDK的区别是什么 2 WDK全称叫做 3 如何创建WDK程序 4 WinDbg如何连接虚拟机 5 Windows内核符号表的作用 6 如何设置内核符号表与源文件 7 如何设置断点与源码调试 8
  • intel android haxm,使用Intel HAXM为Android模拟器加速,媲美真机

    Intel HAXM Hardware Accelerated Execution Manager 使用基于 Intel R Virtualization Technology VT 的硬件加速 因此需要 CPU 支持 VT 而且仅限于 I
  • 定位技术课程设计-微信小程序校园导游系统

    定位技术课程设计课程设计教学目的课程设计要求课程设计题目原题目拓展内容需求分析原理分析微信小程序API定位原理WIFI指纹定位原理路径规划算法调研详细设计总述主页面介绍学校简介页面介绍导引页面概述导引地图景点列表景点详细介绍页面搜索界面导航
  • 测试下几个网络相册

    1 百度相册外链分享 优点 国内站 速度快 可以批量上传 缺点 右下角会有水印 很是不爽 2 试下Photobucket 免费 无水印
  • 第一次CCF CSP认证体验

    今天是我第一次参加CCF CSP认证 虽然这已经是第十二次CCF认证了 感觉题目有点难欸 前面两道题暴力写完 然后看了第三题 哇 简直难写 第四题看了看 数据1e5条边 不会做 就写了一个暴力 希望能过点数据 第五题感觉像是一个动态规划 完
  • HTML(HBuilder)作业题10- 用户登录(jquery)

    问 简单的用户登录怎么弄 答 1 利用jquery 2 利用if 注释 用鼠标离开区域开始判断 可以自行尝试修改成click单击按钮 HBuilder
  • 【华为OD机试真题 Python】最多等和不相交连续子序

    前言 本专栏将持续更新互联网大厂机试真题 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于大厂机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda email nansun0
  • mmdetection常见报错以及解决方案汇总

    目录 1 MMCV 安装相关 1 MMCV 与 MMDetection 的兼容问题 ConvWS is already registered in conv layer AssertionError MMCV xxx is used but
  • MFC之AfxbeginThread 线程 创建、挂起、释放、结束、退出

    MFC之AfxbeginThread 线程 创建 挂起 释放 结束 退出 本文简单阐述了如何使用一个afxbeginthread创建一个线程 两种方法 使用默认设置 使用自主设置参数 以及一些如同 挂起 释放 边界锁等操作 h文件添加声明
  • 简单浅谈 电鱼机的脉宽、频率、占空比

    高频鱼机后级的脉宽 频率 占空比 以上三个参数很重要 它不仅是设计鱼机的主要参数 而且也是输出效果调整的最终目标 根据本人长时间玩高频机的一点点经验现向大家浅谈一下脉宽 频率 占空比与之高频鱼机的设计与最终输出效果的两者密切关系 首先说一下
  • 基于s5pv-210开发板 LCD驱动

    lcd硬件原理 利用液晶制成的显示器称为 LCD 依据驱动方式可分为静态驱动 简单矩阵驱动以及主动矩阵驱动 3 种 其中 简单矩阵型又可再细分扭转向列型 TN 和超扭转式向列型 STN 两种 而主动矩阵型则以薄膜式晶体管型 TFT 为主流
  • [深入研究4G/5G/6G专题-50]: URLLC-16-《3GPP URLLC相关协议、规范、技术原理深度解读》-10-高可靠性技术-1-低编码率编码调制方案MCS与高可靠性DRB

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文主页 目录 前言 第1章 什么是MCS 1 1 概念 1 2 MCS针对的对象
  • 转载RAW, YUV, RGB, JPEG之间关系

    RAW格式 从Sensor端最初获取的数字格式的数据 又称为Bayer格式 每个像素信息只有RGB中的某个颜色信息 且每4个像素中有2个像素为G信息 1个R信息 1个B信息 即GRBG格式 2M像素Camera以RAW10格式 每个像素10
  • url的讲解

    摘抄博客 什么是URL URL是什么意思 刘宇凡的专栏 CSDN博客 ur是什么意思 什么是URL URL是Uniform Resource Locator的缩写 即统一资源定位系统 也就是我们通常所说的网址 URL是在Internet的W
  • go get: installing executables with ‘go get‘ in module mode is deprecated.

    go get installing executables with go get in module mode is deprecated 问题描述 原因分析 解决方案 参考链接 问题描述 场景描述 执行go get github com
  • 关于CVE-2023-27161 Jellyfin流媒体系统存在SSRF漏洞的学习

    漏洞描述 Jellyfin 直到 v10 7 7 通过组件 Repository 包含服务器端请求伪造 SSRF 此漏洞允许攻击者通过构建的 POST 请求访问网络资源和敏感信息 环境及部署说明 实验环境 Centos 7 试验机器IP地址
  • 诚之和:Python机器学习之逻辑回归

    在机器学习领域中 逻辑回归是一个非常经典的算法 今天小编带来的是一片关于逻辑回归算法的介绍与实现 希望能给各位小伙伴带来一些帮助 一 题目 1 主题 逻辑回归 2 描述 假设你是某大学招生主管 你想根据两次考试的结果决定每个申请者的录取 机
  • 小程序使用mqtt时的问题

    由于业务需求 小程序项目中需使用mqtt 当我像Vue项目一样去使用时却出现了种种问题 归根结底还是因为没有去仔细看文档 因为英文文档实在懒得看 就那么顺其自然的写 结果浪费了一天时间 这里对小程序中使用mqttjs遇到的问题进行总结 mq
  • java获取两个时间之间的所有日期、月份、年份,返回列表

    需求描述 输入开始时间和结束时间 获取时间范围内的所有日期 月份 年份 输入可以为 yyyy MM dd HH mm ss 或者 yyyy MM dd 一 输入开始时间和结束时间 返回时间范围内中的所有日期列表 传入两个时间范围 返回这两个
  • Javascript组件化开发设计思想

    一 引言 项目中经常用web弹层组件 layer 其常见的代码如下 使用的时候很方便 弹窗的宽高 内容 标题 关闭按钮等弹窗的状态我们都可以通过配置参数配置 layer弹层组件用同一套代码来满足不同的弹窗层表现的需求 这便是组件开发的强大之