Javascript组件化开发设计思想

原生HTML通过JS(ES6、JQuery)引入公共模块(header,footer,menu等)实现模块化以及组件化,实现父子组件传值以及数据监听(基于Object.defineProperty) 一些项目有时候,因为需求不同,比如需要SEO或者项目很小,亦或者只需要做一个简单好管理的官网或者网站等等,在这种情况下,我们再去使用类似于vue和react等等这类型框架,就有一点大材小用,也有点费时间。但是,vue这类框架的组件化开发在体验上对开发者非常友好,那么我们如果通过使用原生的前端技术去实现组件化开发? 阅读详情

一、引言

项目中经常用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

 

 

 

 

 

从时序博弈到数据稳定:CS1237驱动中的信号滤波与卡尔曼实践 本文探讨了CS1237高精度ADC驱动在复杂工业环境中的信号处理挑战,重点介绍了一阶滤波与自适应卡尔曼滤波算法的实践应用。通过参数优化和动态调整策略,有效提升了数据稳定性和抗干扰能力,为嵌入式系统在噪声环境下的精密测量提供了可靠解决方案。 阅读详情

相关推荐

吃透Chisel语言.02.Chisel+VS Code+Ubuntu/WSL2开发环境搭建与使用

既然是学Chisel语言,那肯定得先把环境配置好,磨刀不误砍柴工嘛。而且有个测试环境的话,在后期的学习过程中自己去试运行代码段可以加深学习效果。这里推荐使用Ubuntu或者基于WSL2(Windows Subsystem Linux 2)的Ubuntu,本人使用的是WSL2上的Ubuntu 20.04.3 LTS,在使用体验上与Ubuntu几乎没有区别,且能同时使用Windows提供的诸多便利。...

github-3rr0r的博客 8448

day46_jquery_组件开发

1Js的组件开发1.1基本组件的开发1.1.1树的组件的开发1.1.1.1开发基本的组件1、以jquery插件的形式开发(function($){ })($);2、因为要用继承的形式实现具体的树,所以整个组件采用json格式的写法 createTree: function(config){ //var treeObj = this;//把this赋值给当前变量

优快云_AF的博客 1315

数据库存储分层架构搭建:热数据 SSD 存储、冷数据归档的配置操作及性能对比分析

本文探讨了数据库存储分层架构的优化策略。随着数据量激增,传统单一存储模式面临成本与性能的平衡难题。文章提出通过热数据SSD加速和冷数据归档降本的分层方案,系统分析了热数据SSD配置、冷数据归档操作及性能对比。分层架构基于数据活跃度匹配存储介质,使热数据保持高性能访问,冷数据低成本存储,实现总体成本降低60%-80%的同时确保核心查询性能。文中详细介绍了硬件选型、数据库配置、数据迁移等技术细节,并强调了动态调整分层策略的重要性,为构建高效经济的数据库存储体系提供了完整解决方案。

jingjing45678的博客 1292

深入学习Vue.js(九)组件实现原理

setup函数时Vue3新增的组件选项,有别于Vue2中的其他组件选项,setup函数主要用于配合组合式API,为用户提供一个地方,用于创建组合逻辑、创建响应式数据、创建通用函数、注册生命周期钩子等。但是,响应式数据修改的同时,相对应的组件也会重新渲染,当多次修改组件状态时,组件将会连续渲染多次,这样的性能开销明显是很大的。在组件中,我们约定组件使用data函数来定义组件自身的状态,同时可以在渲染函数中,调用this访问到data中的状态。通常来说,组件渲染函数的返回值必须是其组件本身的虚拟DOM。

volit的博客 1072

DL-FWI基础入门培训视频学习1、2

DL-FWI基础知识

shengMio的博客 711

程序员应用AI大模型创业实现财务自由的100种赚钱方案原理与实战指南

成功的 AI 创业者都遵循着 “技术 + 需求 + 变现” 的铁三角法则。记住:不是要做 “全能大模型”,而是成为某个垂直领域的 “AI 解决方案专家”。现在就开始行动:用周末 2 小时完成第一个 MVP,下周启动种子用户测试,三个月内找到可复制的盈利模式。当你实现第一个 10 万用户时,会发现财务自由的密码藏在持续迭代的每个 0.1 版本更新中。延伸思考:你的技术背景适合切入哪个细分领域?

AI天才研究院 1381

开发JavaScript组件(完整示例)

使用JavaScript,按照面向对象的思想来构建组件。 现以构建一个TAB组件为例。 从功能上讲,组件包括可视部分和逻辑控制部分;从代码结构上讲,组件包括代码部分和资源部分(样式、图片等)。 组件的特点:高内聚,低耦合(不与其他代码逻辑交叉,可以继承,包含);封装性(隐藏私有方法和变量);可重用性(可反复多次使用,用来组装更复杂的应用)。 <html> <head> <meta http-equiv="Content-Type" content="text/html.

1120

Linux kernel crypto的介绍和代码导读

在Linux kernel的module_init阶段会将algif_type_skcipher、algif_type_aead、algif_type_hash、algif_type_rng 四种算法注册.在userspace通过netlink调用了,kernel种的af_alg模块收到消息后, 根据上层传来的算法种类名字来选择走哪一个结构体(alg_type_xxx)的ops函数。也就是添加到af_alg维护的alg_types链表种. alg_types链表种仅有这四个数据.

baron-周贺贺-代码改变世界ctw 322

《现代Javascript高级教程》JavaScript引擎的工作原理:代码解析与执行

JavaScript引擎是一种解释和执行JavaScript代码的软件或硬件组件。它负责将JavaScript代码转换为可执行的指令,并在计算机或设备上执行这些指令。每个浏览器都有自己的JavaScript引擎,用于在浏览器中执行JavaScript代码。V8引擎:由Google开发,用于Google Chrome浏览器和Node.js服务器环境。SpiderMonkey引擎:由Mozilla开发,用于Mozilla Firefox浏览器。JavaScriptCore引擎。

linwu的博客 738

爬取B站评论+AI情感分析:Python批量抓数据+BERT正负向分类(全流程)

B站作为年轻群体聚集的内容平台,评论区蕴含海量用户真实态度(如好评、吐槽、中立观点),是情感分析的优质数据源!本文分享完整流程:批量爬取B站视频评论→数据清洗去噪→BERT模型情感分类→可视化分析,基于预训练BERT模型实现高精度正负向判断,新手也能快速复刻情感分析系统! 前置配置(关键!获取B站API访问权限) B站评论通过官方API接口返回,无需复杂解析,只需配置用户Cookie即可正常请求: 2. 完整代码(直接复制运行) 三、使用步骤(5步搞定,新手友好) 步骤1:配置关键参数 打开,在类中修改

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1069

【AHE数据集】中国2019年多源热排放数据集-500m空间分辨率

【AHE数据集】中国2019年多源热排放数据集

WW、forever的博客 412

JavaScript组件设计思想

“当你学会了用‘分层思想’去看待事情,任何的问题都不是问题,都可以实现”。当然,这里说的是在程序设计方面。自己觉的很有道理,但是体会不是很深。  紧跟着,这个周期盼已久的“重构版热图”上线了,“低bug率、高速度”等在各方面指标瞬间秒杀“旧版热图”, 大致思想如下:将每个功能点最小颗粒化、然后将其封装成模块;创建数据中心,使各个模块不在互相调用嵌套,所有的依赖和调用全部通过数据中心(这里使用自

qq_39458443的博客 321

手把手教你学simulink(28.2)--四旋翼无人机景示例:基于自抗扰控制(ADRC)的无人机姿态稳定系统

通过上述代码实现,您可以逐步创建和搭建一个基于自抗扰控制的无人机姿态稳定系统。该系统能够实时估计和补偿外部扰动及模型不确定性,确保无人机姿态稳定。自抗扰控制具有较强的鲁棒性和适应性,能够在存在不确定性和扰动的情况下提供快速且精确的控制性能。Simulink提供了强大的建模和仿真工具,使得控制系统工程师能够快速构建复杂的控制算法,并将其应用于实际工程中。无人机动力学建模:建立无人机的六自由度(6-DOF)动力学模型,包括位置、速度、姿态角和角速度。自抗扰控制器设计。

MHD0815的博客 501

前端组件化思想

1.开篇   先说说为什么要写这篇文章吧:不知从什么时候开始,大家相信前端摩尔定律:“每18个月,前端难度会增加一倍”。我并不完全认可这个数字的可靠性,但是这句话的本意我还是非常肯定的。   是的,前端越来越简单了,但也越来越复杂了—简单到你可以用一个Github的starter搭建一个框架,集成所有的全家桶,涵盖单元测试和功能测试,包括部署以及发布,甚至你开发时使用的UI库都让你写不了几行c...

追 2万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

初识HTML(五)---组件化思想

组件化思想 本文我们来聊聊组件化思想 好比我们的衣服 我们总不能一下子穿一套(内衣,内裤,袜子,棉裤,外套等等,我们总不能缝在一起穿吧,这样就只有这一套搭配了) 而且你做出来好看的衣服了,可以拿给别人去参考做衣服,衣服还可以染色改变大小啥的 我们之前练习的网页都是一下做好多件衣服缝在一起穿,现在我们来拆开分别制作,想穿什么穿什么,爱怎么搭配怎么搭配 <html> <head> <meta charset="utf-8"> <title></ti

代码哈士奇的博客 6054

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JS——简单的组件化开发思想

/*利用立即执行函数和闭包的原理:*/ /*1. 定义外部接收用的变量*/ var yourVar; /*2. 封装组件*/ (function(形参root){ function 内部函数1 (arg) { /*对arg进行你想要的操作*/ return 对arg操作的结果; ...

weixin_38335055的博客 445

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

WEB组件化思想

JS不同层的职责和API 浏览器低层分层大概也可以分为DOM / BOM / STYLE 样式 /Canvas 2D / WebGL / SVG 浏览器底层面临的一些问题 JS核心语法层面薄弱 JS原生API不好用 (ajax , cookie ,) 浏览器兼容问题 (IE9微软用了自己一套的东西,搞事情?) 对过时浏览器的兼容性问题是沉重的知识包袱, 关键是这种知识没有延续性,会影响你学

含笑 3067

组件化思想

一 概念 在VUE中 可以将一个组件,看作是一个页面. 在其中可以引入独立的样式/JS/HTML 进行单独的管理. 组件可以进行复用. 二 组件化步骤: 1.定义组件 全局组件: 任意的DIV都可以引入该组件 局部组件: 只有特定的DIV可以引入组件 2. 编辑组件的key(注意驼峰规则的写法) 编辑组件体 特殊语法: 定义属性时 data(){return{ key:value}} html标签: 使用template进行标记 3.通过key对组件进行引用 三 注意事项 组件进行

没伞的孩子努力奔跑 160

Vue.js教程-组件化开发

Vue.js教程-组件化开发前言Vue组件化什么是组件化Vue单页面开发的解释组件化思想组件的使用原理实际开发中的使用-父子组件父子组件传递数据父传子-props用法子传父-this.$emit()自定义事件父组件直接获取子组件的数据this.$childrenthis.$ref子组件直接获取父组件的数据-this.$parent非父子组件之间的数据传递总结 前言 本章介绍为什么要进行组件化开发、什么是组件化和组件之间的关系和数据传递。 Vue教程目录 Vue组件化 什么是组件化 当我们遇到复杂问题时

CoderHqf的博客 4218

Vue 组件化思想和实现步骤

什么是组件化? 组件化思想 组件化是Vue.js中的重要思想 它提供了一种抽象,让我们可以开发出一个个独立可复用的小组件来构造我们的应用 任何的应用都会被抽象成一颗组件树 组件化思想的应用: 有了组件化的思想,我们在之后的开发中就要充分的利用它。 尽可能的将页面拆分成一个个小的、可复用的组件。 这样让我们的代码更加方便组织和管理,并且扩展性也更强。 注册组件步骤 注册组件步骤解析 1.Vue.extend(): 调用Vue.extend()创建的是一个组件构造器。 通常在创建

小小前端攻城狮的博客 1292

Vue.js 组件化开发

三、组件化开发1.1 组件化的实现和使用步骤组件注册步骤解析1.2 全局组件和局部组件1.3 父组件和子组件1.4 注册组件语法糖1.5 组件模板抽离的写法        人面对复杂问题的处理方式: 任何一个人处理信息的逻辑能力都是有限的 所以,当面对一个非常复杂的问题时,我们不太可能—次性搞定一大堆的内容。 但是,我们人有一种天生的能力,就是将问题进行拆解。如果将一个复杂的问题,拆分成很多个可以处理的小问题,再将其放在整体当中,你会发

wang_zhao_的博客 3143

你一定要会的适配技巧和组件化思想

你一定要会的适配技巧和组件化思想 rem:利用它能实现强大的屏幕适配布局 less:Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,使 CSS 更易维护和扩展。(代表的有less,Sass,stylus) 模板引擎:art-template(实现组件化,代码不复用,提高开发效率)(当然还有很多其它好用的模板引擎,但原理上基本一样。) 说明 本...

周琛的点滴记录~ 397

Vue笔记 (七) 组件化思想

Vue组件化 组件化是 Vue.js 中的重要思想,它提供了一种抽象,让我们可以开发出一个个独立可复用的小组件来构造我们的应用。任何的应用都会被抽象成一颗组件树: 注册组件的基本步骤(了解) Vue.extend()这种写法在Vue2.x以后基本就很少见了,会直接使用语法糖,但内部还是这个原理。 全局组件和局部组件 当我们通过调用 Vue.component() 注册组件时,组件的注册是全...

weixin_43026567的博客 574

Vue2.0的核心思想 数据驱动、组件化

Vue的核心思想为数据驱动和组件化。 一、数据驱动——双向绑定 Vue是一种MVVM框架。而DOM是数据的一个种自然映射。传统的模式是通过Ajax请求从model请求数据,然后手动的触发DOM传入数据修改页面。Vue中,Directives对view进行了封装,当model里的数据发生变化是,Vue就会通过Directives指令去修改DOM。同时也通过DOM Listener实现对视图view的...

酱子 2262

vue组件化思想及基本使用步骤

vue组件化思想 组件化思想的应用: 1.有了组件化的思想,我们在之后的开发中就要充分的利用它。 2.尽可能的将页面拆分成一个个小的、可复用的组件。 3.这样让我们的代码更加方便组织和管理,并且扩展性也更强。 分治思想 注册组件的基本步骤 组件化使用基本步骤 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>基本使用</title>

407指导员 305

Alpine.js组件化

组件化是现代前端开发的重要概念,它将复杂的界面拆分成可复用的独立部分,有助于提高代码的可维护性和可读性。在这个例子中,我们创建了一个简单的计数按钮组件。组件的 HTML 结构和事件处理器被分离到不同的文件中,提高了代码的可读性和可维护性。父组件可以监听子组件触发的事件,并根据事件的类型和携带的数据作出响应。通过事件和属性的传递,这三个组件紧密协作,实现了完整的评论系统功能。在 Alpine.js 中,组件通常是一个自包含的 HTML 文件,其中包含。属性,并在按钮上显示了这个属性的值。

天涯学馆 1235
上一篇: JS之用面向对象和传统过程式编程
下一篇: 视差效果的实际应用
小菜101
博客等级 码龄10年 16粉丝 92原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值