所谓模块化就是将需要用到的方法封装成为一个模块,哪里需要直接调用即可。
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 简洁、灵活。
简单工厂模式
它的作用是,利用面向对象的方法,把一些对象封装,使一些占用空间多的,重复的代码封装起来。 实现方法非常简单,也就是在函数内创建一个对象,给对象赋予属性以及方法再将对象返回即可。
|
|
可以看出使用工厂模式,可以重复调用这个per函数来生成不同属性值得对象,这就像工厂一样,批量生产,里面的原料,加工,出厂都很清晰。但是你会发现工厂模式是无法识别对象的类型,因为全都是object,不像Date,Array等,但是构造函数就不是了。这还只是简单的工厂模式,复杂的工厂模式(抽象模式)等以后再回来详细了解。