js的模块化写法

记得前两天本身写一个动画首页,动画很复杂,我用的fullpage虽然相对比较简单,可是每一个页面的animation各有差别,须要相对控制,估计有上千行的js代码,写的心情乱糟糟的。java

如何让代码量巨大,并且能够方便的管理,不会出现命名的冲突,代码结构乱七八糟问题,让代码设计结构清晰明了,这是一个巨大的需求git

其实这就是一个需求分析和解决方案实施的过程。github

  function m1(){
    //...
  }
  function m2(){
    //...
  }

通常人没有什么面向对象和模块化的概念会这么去写。确实js的面向对象不会像java同样明了,除了难以管理就是命名冲突的问题了。api

    var module1 = new Object({
    _count : 0,
    m1 : function (){
      //...
    },
    m2 : function (){
      //...
    }
  });

 把方法封装成对象的方法,这样就能够至关于给函数方法名加个前缀同样,可是麻烦是代码依然会暴露大量的变量,设计代码应该尽可能让代码没必要要暴露的变量封起来。服务器

 因而有人发明了这种写法,执行和上一个对象写法同样,也能够少暴露变量了,这样就是面向对象模块化的基本写法了,可是还要改进的闭包

(function(){
    var _count = 0;
var module1 = function(){              var m1 = function(){         //...       };       var m2 = function(){         //...       };       return {         m1 : m1,         m2 : m2       };     }; window.module1 = module1() })()

 

这种方法是闭包的写法,能够把大量的代码写在闭包里,最后用添加到window属性当中,就暴露出去只有本身想暴露的方法了,这样代码的书写余地也更大了。curl

    var module2 = (function (mod){
    mod.m3 = function () {
      //...
    };
    return mod;
  })(module1);

 

这段代码的意义是实现继承,传入modele,添加新的方法,而后返回,便获得一个新的对象,这个对象有了新的参数异步

模块的规范模块化

先想想,为何模块很重要?函数

由于有了模块,咱们就能够更方便地使用别人的代码,想要什么功能,就加载什么模块。

可是,这样作有一个前提,那就是你们必须以一样的方式编写模块,不然你有你的写法,我有个人写法,岂不是乱了套!考虑到Javascript模块如今尚未官方规范,这一点就更重要了。

目前,通行的Javascript模块规范共有两种:CommonJSAMD。我主要介绍AMD,可是要先从CommonJS讲起。

 

 var math = require('math');
  math.add(2,3); // 5

 

commonJs是这么作的,require至关于load就是加在math.js,而后调用,这是用在服务器端的,可是客户端怎么办,客户端须要异步加载

因此出现了AMD

    require(['math'], function (math) {
    math.add(2, 3);
  });

 

 经过回掉的方式异步加载。

 目前,主要有两个Javascript库实现了AMD规范:require.jscurl.js

相关文章
相关标签/搜索