码迷,mamicode.com
首页 > 编程语言 > 详细

初始JavaScript中的模块

时间:2015-04-13 19:09:33      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

模块

    模块可以提供一个接口,并且隐藏其中的状态与实现的的函数或者对象,利用模块我们可以完全屏蔽全局变量的使用(全局变量太坑了,55555)

一个小例子

Function.prototype.method = function(name,func){
    this.prototype[name] = func;
    return this;
}
String.method("def",function(){
    var ent = {
        quot:‘""‘,
        lt:‘<‘,
        gt:‘>‘
    };
    //这里的整个匿名自执行函数是window调用的
    //this---->window



    return function(){
        return this.replace(/&([^&;]+);/g,function(a,b){
            var r = ent[b];
            return typeof r ==="string" ? r : b;
        });
    };

}());




/**************test*********************/
var  a = "<">".def();
console.log(a);//<"">

在String的自定义def属性 , 这个属性是一个自执行函数, 它会return一个新的函数,并赋值给def(比较绕……..),这个新的函数就是最终的在String添加的def方法,只有他才有权力访问内部的ent 对象

一个单例模式

再看一个生成密匙的例子

<!-- lang: js -->
//模块生成安全的对象
var serial_maker = function (){
    var prefix = "";
    var seq = 0;
    return {    
        set_seq:function(s){
            seq = s;
        },
        set_pre:function(p){
            prefix = p;
        },
        gensym:function(){
            var result = prefix + seq;
            seq += 1;
            return result;
        }
    }
}

var seqer = serial_maker();
seqer.set_pre("W");
seqer.set_seq(100);

console.log(seqer.gensym());//W100
console.log(seqer.gensym());//W101
console.log(seqer.gensym());//W102

这里在是返回一个对象,这个对象里的属性是函数,这些函数能访问serial_maker 中定义的变量,而且外面是无法修改serial_maker变量中的值的,serial_maker 返回的值是唯一的

PS

模块是JavaScript编程的重要思想 , 其实很多情况下,我感觉用模块是比较好的选择,并不是一定要用面向对象的思想,好多框架也是建立在模块的基础的上,比如jQuery,使用的就是架构用面向对象,内部实现使用模块的模式,影响比较神的是jQuery在延迟对象和回调函数部分,内部就使用了模块的方法实现

初始JavaScript中的模块

标签:

原文地址:http://my.oschina.net/wang2014jojo/blog/400651

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!