[JavaStript学习记录] 模块/封装私有变量

这篇博客探讨了JavaScript中的模块化管理,通过立即执行函数实现私有成员的封装,防止外部访问。介绍了‘放大模式’来扩展模块功能,并讨论了如何处理模块间的依赖关系。同时,展示了如何使用立即执行函数作为命名空间,对外仅暴露必要的接口,保持代码的独立性和整洁性。
摘要由CSDN通过智能技术生成

模块(用软件工程的方法,管理网页的业务逻辑)

"立刻执行函数"

为了不暴露私有成员,使用"立刻执行函数",将有关的属性、方法封装在一个函数的作用域中

var m = (function () {
 var count = 0;
 var f1 = function () {
   //...
 };
 var f2 = function () {
  //...
 };
 return {
  f1: f1,
  f2: f2
 };
})();


m.count  

>>undefined  //外部代码无法读取内部的count变量

"放大模式"

情形:

  • 一个模块很大,必须分成几个部分
  • 或者一个模块需要继承另一个模块
var moduleA = (function (mod){
 mod.f = function () {
  //...
 };
 return mod;
})(moduleA);


为模块moduleA添加了一个新方法F(),然后返回新的moduleA模块

在实际中,模块中的各个方法加载的顺序可能是不同的,若是第一个加载的是不存在的对象,则采用 

"宽放大模式"(立即执行函数的参数可以为空对象)

var module = (function(mod){
    //
    return mod
})({} || window.module);

全局变量的输入

为了在模块内部调用全局变量,必须显式地将其他变量输入模块

var module = (function ($, YAHOO) {
 //...
})(jQuery, YAHOO);

把 jQuery 库和 YUI 库两个库(模块)当作参数输入模块中

既保证了模块的独立性,还使模块之间的依赖关系变得明显

//立即执行函数可以起到命名空间的作用

(function($, window, document) {

  function handleEvents() {
      //...
  }

  function initialize() {
      //...
  }

  function destruction() {
      //...
  }
  
  //对外只暴露init和destroy接口
  window.finalAction = {
    init : initialize,
    destroy : destruction
  }

})( jQuery, window, document );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泥烟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值