前端开发中的模块化编程详解

前言

前端技术发展日新月异,随着Ajax技术的广泛引用,jQuery库的层出不穷,前端代码日益膨胀,javascript的发展领域越来越广泛,就会应用使用模块化编程去规范管理。本文从模块化概念,为什么要模块化,各种模块化方式的优缺点。以及并且都一一通过实例模拟演练,介绍模块化的发展进程,模块化规范,。能让读者更好的理解模块化编程的理念。

模块化基本概念

  • 模块是什么?
    模块就是独立存储实现特定功能的一组方法的程序结构。其实就是一个实现特定功能的js文件。
  • 什么是模块化编程?
    模块化编程就是,程序中都是用模块先分类组织方法,再按需引入并使用模块中的方法。其实就是按一定规范将一个大文件拆分成相互依赖的小文件,再进行统一的拼装和加载。
  • 为什么要使用模块化编程?
    随着前端网站和应用的功能逐渐发展,引入的Javascript代码越来越庞大,就迫切需要按业务逻辑划分和维护程序结构,然后由团队分工协作才能完成。模块化编程就是为了便于按业务逻辑划分程序结构,并且便于团队分工协作。比如一个十万行代码的项目,如果都放在一个文件里,然后一群人围着一个文件办公,你可以想像一下那是个什么情况
  • 模块化编程优点
    1.避免变量全局污染,命名冲突
    2.提高代码复用率
    3.提高代码的可维护性
    4.多人协作互不干扰

js文件实现模块化编程(原始方式)

其实就是将多个相关的函数,集中定义在一个js文件中。

  • 全局function模式 : 将不同的功能封装成不同的全局函数。比如,我们可以创建一个users.js文件,包含登录和注册的方法,然后使用时引入users.js文件,就可以调用js文件中的方法了。
//user.js文件
function signin(){
   
  console.log("登录...");
}
function signup(){
   
  console.log("注册...");
}
<!-- 引入user.js文件 -->
<script src="users.js"></script>
<script>
  signin();
  signup();
</script>

问题:模块中所有内容都是全局变量和函数,造成全局污染,也极易发生冲突。

比如我们修改users.js文件,添加getById函数,表示按id查找一个用户。再新建products.js文件,也添加getById函数,表示按id查找一个商品。

//user.js文件
function signin(){
   
  console.log("登录...");
}
function signup(){
   
  console.log("注册...");
}
function getById(){
   
  console.log("按id查询一个用户...");
// product.js文件
function getById(){
   
  console.log("按id查询一个用户...");
}
<!-- 引入user.js和product.js文件 -->
<script src="users.js"></script>
<script src="product.js"></script>
<script>
  getById()
  //结果只会输出一个,后引入的getById()会把之前引入的覆盖掉
</script>
  • namespace模式 : 简单对象封装。定义功能时,将一个js文件中一组相关方法,存储在一个对象结构中,,一定程度上减少了全局污染。
    使用时,同样引入js文件。
    但是,不能直接调用函数,而是通过对象.方法()的方式,调用对象的方法。但这样做也有问题,会将整个对象,暴露在其他程序中,易被篡改。
//user.js文件
var users={
   
  count: 10,
  signin(){
   
    console.log("登录...");
  },
  signup(){
   
    console.log("注册...");
  },
  getById(){
   
    console.log("按id查询一个用户...");
  },
  getCount(){
   
    console.log("在线人数: "+this.count);
  }
}
// product.js文件
var products={
   
  getById(){
   
    console.log("按id查询一个商品...");
  }
}
<!-- 引入user.js和product.js文件 -->
<script src="users.js"></script>
<script src="product.js"></script>
<script>
  users.signin();
  users.signup();
  users.getById();
  products.getById();//两个id查找函数都可以调用
  users.getCount();
  users.count=0;//轻松篡改对象中的属性
  users.getCount();
</script>
    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值