如何封装JS-模块化与封装

所谓模块化就是将需要用到的方法封装成为一个模块,哪里需要直接调用即可。

js库+命名空间

网上常用的较为简单的一种方法是创建js库,要避免重复,封装自己的函数,要使用命名空间,对象就是天然的命名空间。

(function(global){
    var myfun1=function(){
        console.log('myfun1');
    };
    var myfun2=function(){
        console.log('myfun2');
    };
    //设置你的命名空间
    var mypackageName="com.mydomain.utils";
    var packageArray=mypackageName.split(".");
    var finalObj=packageArray.reduce(function(prev,current){
        return prev[current]||(prev[current]={});
    }, global);

    //将你的函数绑定到命名空间上
    finalObj.myfun1= myfun1;
    finalObj.myfun2= myfun2;

}(window));

com.mydomain.utils.myfun1();//输出 myfun1
com.mydomain.utils.myfun2();//输出 myfun2

ES模块封装

现在模块化机制已经成熟,另一种是使用ES2015 module封装模块。 (1)首先学会怎么用 ES2015 来编写/封装模块(node/npm,加上 babel 的入门知识); (2)学会发布到npm; (3)如何引入模块到应用体系中,如何加载/打包(gulp/webpack/jspm等)。 封装不只是要学习代码怎么写,更要知道如何维护和应用,否则封装就不具备普适性。

JavaScript不是基于OO的语言,class不是必需的,还有其他模式,比如工厂函数(Factory Functions)要远比 class 简洁、灵活。

简单工厂模式

它的作用是,利用面向对象的方法,把一些对象封装,使一些占用空间多的,重复的代码封装起来。 实现方法非常简单,也就是在函数内创建一个对象,给对象赋予属性以及方法再将对象返回即可。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function creatper(name,age){  

var per=new Object(); //原料

//加工

 per.name=name;

 per.age=age;  

per.sayHi=function(){

  console.log(per.name+''+per.age);  }  

return per; //出厂

}

var me=creatper('katherine',22);

me.sayHi();

console.log(me.name);

可以看出使用工厂模式,可以重复调用这个per函数来生成不同属性值得对象,这就像工厂一样,批量生产,里面的原料,加工,出厂都很清晰。但是你会发现工厂模式是无法识别对象的类型,因为全都是object,不像Date,Array等,但是构造函数就不是了。这还只是简单的工厂模式,复杂的工厂模式(抽象模式)等以后再回来详细了解。

Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy