如何封装一个js文件?
封装js文件时的注意事项
避免全局变量污染:使用闭包或模块模式封装代码,不将变量暴露在全局作用域。
// 闭包方式
(function () {var a = 1;function foo() {// ...}
})();// 模块模式
var module = (function () {var a = 1;function foo() {// ...}return {foo: foo}
})();
指定严格模式:在 JS 文件的首行添加 'use strict';。这能避免许多 JS 潜在的问题。
'use strict';(function () {// ...
})();
命名空间:使用对象字面量创建命名空间,防止函数与变量名称冲突。
var namespace = {utils: {// ...},dom: {// ...}
}
顶层函数和变量使用下划线 _ 开头:这是一种暗示这些成员是私有的约定。
var _foo = 1;function _bar() {// ...
}
使用 IIFE 或模块模式封装代码:不仅可以避免变量污染全局作用域,还可以模拟类。
var Person = (function () {function _constructor() {}// 使用 _constructor 和 _proto 属性模拟 classvar _proto = _constructor.prototype;_proto.sayName = function () {};return _constructor;
})();
为文件添加 nocache 请求参数:这可以防止浏览器加载缓存的脚本文件。
<script src="foo.js?nocache"></script>
举例
封装一个简单的 DOM 操作库:
// dom.js
'use strict';var dom = (function () {var _element = document.createElement('div');function _create(tagName) {return document.createElement(tagName);}function _setText(ele, text) {ele.textContent = text;}function _append(parent, child) {parent.appendChild(child);}function _addClass(ele, className) {ele.classList.add(className);}function _on(ele, event, handler) {ele.addEventListener(event, handler);}return {create: _create,setText: _setText,append: _append,addClass: _addClass,on: _on };
})();
这个 DOM 库使用模块模式封装了一些常用的 DOM 操纵方法,并暴露了一个 dom 的命名空间对象给外部使用。它具有以下注意事项:
- 使用严格模式
- 封装代码使用模块模式
- 私有成员使用下划线
_开头 - 创建 dom 命名空间对外暴露接口
- 避免污染全局环境这样封装的文件具有良好的模块化和封装性,可以在其他 JS 文件中灵活使用。
引入和使用
外部引入这个 dom.js 文件有两种方式:
直接使用<script>标签引入
//html
<script src="dom.js"></script>
此时可以直接通过 dom 命名空间使用该库,不需要 export:
//js
dom.create('h1');
使用 ES6 的 import 语法引入
//js
import * as dom from './dom.js';
这种情况下,dom.js 文件需要使用 export 暴露接口:
//js
// dom.js
var dom = (function () {// ...return {create: _create,// ...};
})();export { dom };
然后在引入的文件中可以通过 dom 命名空间使用:
//js
dom.create('h1');
总结:
- 如果是直接通过
<script>标签引入,不需要 export,外部可以直接使用库暴露的全局变量。 - 如果是通过 ES6 import 语法引入,那么库文件需要使用 export 暴露接口,然后外部通过 export 导入使用。
- 无论是哪种方式引入,都能达到避免全局污染的目的。使用库的代码只会影响库暴露的接口,不会污染全局环境。所以推荐使用 ES6 的模块化语法,这是更规范的JavaScript模块解决方案。通过 export 和 import 可以建立模块间的依赖关系,并确保避免命名冲突。
相关文章:
如何封装一个js文件?
封装js文件时的注意事项 避免全局变量污染:使用闭包或模块模式封装代码,不将变量暴露在全局作用域。 // 闭包方式 (function () {var a 1;function foo() {// ...} })();// 模块模式 var module (function () {var a 1;function foo() {// ...}return {foo: fo…...
计算卸载-论文05-双层优化(无线充电与卸载)
标题:《A Divide-and-Conquer Bilevel Optimization Algorithm for Jointly Pricing Computing Resources and Energy in Wireless Powered MEC》 期刊:IEEE TRANSACTIONS ON CYBERNETICS,2022 一、理论梳理 问题:相比于移动云…...
RSBBS 报表接口 query跳转 RRI
这里只讲RSBBS的goto query,不讲query里面的替换路径。 报表接口就是从一个query跳转到另一个目的地。从下面能看到,可以跳转到一个BW系统下的query,或者能跳转到ERP系统的一个ABAP report也行,或者可以通过archive link去从quer…...
失业五个月,终于有offer了!但这家公司的风评惨不忍睹,要接吗?
往年,程序员们找工作可以说是不怎么费力的,不少求职者还会比对几家offer,看薪酬、看加不加班、看通勤时间等等等等,最后选择自己最满意的那一家过去。 但是今年,情况确实完全不一样,用网友的话形容就是“往…...
智慧井盖监测终端,智能井盖-以科技解决智慧城市“顽疾”,守护城市生命线
平升电子智慧井盖监测终端,智能井盖-以科技解决智慧城市“顽疾”,守护城市生命线-智慧井盖,实现对井下设备和井盖状态的监测及预警,是各类智慧管网管理系统中不可或缺的重要设备,解决了井下监测环境潮湿易水淹、电力供应困难、通讯不畅等难题…...
VMware Workstation 与 Device/Credential Guard 不兼容.在禁用 Device/Credenti
这个时候我们需要去关掉几个功能 1、关闭Hyper-V 打开控制面板首页,找到“程序”,然后找到“启用或关闭Windows功能”,找到“Hyper-V”,有勾中的全部都取消掉,如果这一步操作失败,不要紧,继续…...
微信小程序开发实战课后习题解答————第四章(作业版)
一、填空题 1、 组件 是视图层的基本组成单元。 2、 swiper内部只可以放置 swiper-item 组件。 3、 设置text文本内容长按可选的属性是 selectable 。 4、navigator组件通过设置 open-type 属性,来区分不同的跳转功能。 5、通过image的 mode …...
web缓存—Squid代理服务
1.squid的相关知识 1.1 squid的概念 Squid服务器缓存频繁要求网页、媒体文件和其它加速回答时间并减少带宽堵塞的内容。 Squid代理服务器(Squid proxy server)一般和原始文件一起安装在单独服务器而不是网络服务器上。Squid通过追踪网络中的对象运用起…...
免费可用 ChatGPT 网页版
前言 ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI 研发的聊天机器人程序 ,于2022年11月30日发布 。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言来…...
【JVM】7. 方法区
文章目录 7. 方法区7.1. 栈、堆、方法区的交互关系7.2. 方法区的理解7.2.1. 方法区在哪里?7.2.2. 方法区的基本理解7.2.3. HotSpot中方法区的演进 7.3. 设置方法区大小与OOM7.3.1. 设置方法区内存的大小7.3.2. 如何解决这些OOM 7.4. 方法区的内部结构7.4.1. 方法区&…...
23种设计模式之代理模式(Proxy Pattern)
前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的代理模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大佬不…...
服务扫描与查点-渗透测试模拟环境(3)
本篇将介绍服务扫描与查点渗透模拟环境下整理的各类收集方法、各类工具技术使用的演示,阅读后可用在工作上。 很多网络服务是漏洞频发的高危对象,对网络上的特定服务进行扫描,往往能让我们少走弯路,增加渗透成功的几率。确定开放端口后,通常会对相应端口上所运行服务的信息…...
Educational Codeforces Round 148 (Rated for Div. 2) 题解
总结:5.21下午VP一场,死在了A题,给我wa崩溃了,浪费了差不多一个小时,BC还挺顺畅,虽然C题是在结束后不久交上去的。。。。 A. New Palindrome 思路:其实思路很简单,“The string s …...
Java自定义类:打造属于自己的编程世界
🧑💻CSDN主页:夏志121的主页 📋专栏地址:Java核心技术专栏 目录 一、自定义类示例 二、隐式参数与显式参数 三、封装的优点 自定义类是Java中最基本、也是最重要的组成部分之一,使用者可以根据需求创建…...
kubectl top pod输出的cpu、内存使用率是怎么计算的
使用 kk 创建 k8s 集群 文档:https://github.com/kubesphere/kubekey/blob/master/README_zh-CN.md 1、下载 kk export KKZONEcn curl -sfL https://get-kk.kubesphere.io | sh - yum -y install conntrack socat2、生成配置文件,根据环境修改配置文件…...
Spring和SpringBoot常用注解(持续更新)
持久层(pojo) 1.Data注解 lombok注解,用于自动生成getter\setter\toString等方法,使用前需要在pom.xml中引入如下内容 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifa…...
redis做异步消息处理
pom依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 发送消息: RedisTemplate.convertAndSend(String channel, Obj…...
图书管理系统可行性分析报告
目 录 引言 1 1.1 编写目的 1 1.2 背景 1 1.3 定义 1 1.4 参考资料 1可行性研究的前提 1 2.1 要求 1 2.2 目标 1 2.3 条件、假定和限制 1 2.4 进行可行性研究的方法 2 2.5 评价尺度 2对现有系统的分析 2 3.1 处理流程和数据流程 2 3.2 工作负荷 2 3.3 费用开支 2 3.4 人员 2 3…...
比较难掌握的几道数据库面试题及答案
1.行级锁定的缺点: 比页级或表级锁定占用更多的内存。当在表的大部分中使用时,比页级或表级锁定速度慢,因为你必须获取更多的锁。 如果你在大部分数据上经常进行GROUP BY操作或者必须经常扫描整个表,比其它锁定明显慢很多。 用高…...
AI已经成立社区了,一个个比真人还真
文章目录 nainaimichirper川普的入驻英文版 nainaimi nainaimi是一个13岁的学生,一小时前,被一群人拖到体育馆, 那时的她还很胆小,只能哭诉着那些人的残忍和恶毒 结果半个小时前,她又被拖入了体育馆,这一…...
【仅限首批200名农业IT负责人开放】PHP物联网数据看板性能压测报告(含Raspberry Pi 4实测QPS 41.8)
第一章:农业 PHP 物联网数据可视化案例在智慧农业实践中,PHP 作为轻量级后端语言,常被用于快速构建物联网数据聚合与可视化看板。本案例基于 ESP32 传感器节点采集土壤湿度、环境温湿度及光照强度数据,通过 HTTP POST 协议上传至 …...
一文搞懂 Spring Cloud:从入门到实战的微服务全景指南(建议收藏)蜗
一、中间件是啥?咱用“餐厅”打个比方 想象一下,你的FastAPI应用是个高级餐厅。 ?? 顾客(客户端请求)来到门口。- 迎宾(CORS中间件):先看你是不是从允许的街区(域名)来…...
[Linux][虚拟串口]x一个特殊的字节贤
简介 langchain专门用于构建LLM大语言模型,其中提供了大量的prompt模板,和组件,通过chain(链)的方式将流程连接起来,操作简单,开发便捷。 环境配置 安装langchain框架 pip install langchain langchain-community 其中…...
猫抓浏览器扩展:终极网页资源嗅探与视频下载解决方案
猫抓浏览器扩展:终极网页资源嗅探与视频下载解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到网页上的精彩视频无…...
谐振式与耦合式WPT系统中收发线圈的等效电路建模与性能对比
1. 无线能量传输的基本原理 想象一下,你正在给手机充电,但不需要插线,只要把手机放在桌面上就能自动充上电。这种看似科幻的场景,正是无线能量传输(WPT)技术带来的现实。作为从业十多年的工程师,我见证了这个领域从实验…...
突破抖音内容采集瓶颈:开源工具如何实现高效批量下载
突破抖音内容采集瓶颈:开源工具如何实现高效批量下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...
【2026年最新600套毕设项目分享】基于Spring Boot的音乐播放网站(14348)
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦二、资料介绍完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目(无需搭建环境ÿ…...
通义千问2.5-0.5B-Instruct实战教程:RTX3060推理速度调优
通义千问2.5-0.5B-Instruct实战教程:RTX3060推理速度调优 5亿参数,1GB显存,RTX3060上实现180 tokens/s的推理速度 1. 开篇:小模型的大能量 你是否遇到过这样的困境:想要在本地运行AI大模型,但显存不够用&a…...
日报 | Anthropic发RSP 2.0;DeepSeek V4将至;Claude史诗宕机;Mythos被关
头条:Anthropic发布负责任扩展政策2.0,AI安全治理进入新阶段 炸了!Anthropic刚刚更新了他们的"负责任扩展政策"(RSP),这可是AI安全领域的大事。 重点来了:这次更新引入了更灵活的风险…...
语义通信实战:跳过“比特”保“语义”,手把手构建轻量级图像压缩重建网络(基于PyTorch)
语义通信实战:轻量级图像压缩重建网络从零实现(PyTorch版) 在无人机巡检、远程医疗等物联网场景中,传统图像传输常面临带宽与功耗的双重压力。我们团队去年为某农业无人机项目部署图像识别系统时,发现传统JPEG2000压缩…...
