javascript Module 模式基本用法

var Calculator = function (eq) {
    //这里可以声明私有成员
    
    var eqCtl = document.getElementById(eq);

    return {
        //暴露公开成员
        sum: function (x, y) {
            var val = x + y;
            eqCtl.innerHTML = val;
        }
    }
}
var cclt = new Calculator('great');
cclt.sum(2015, 1028);

大家可能看到了,每次用的时候都要new一下,也就是说每个实例在内存里都是一份copy,如果你不需要传参数或者没有一些特殊苛刻的要求的话,我们可以在最后一个}后面加上一个括号,来达到自执行的目的,这样该实例在内存中只会存在一份copy。

 

匿名闭包:

下面的是推荐写法,

(function () {
    // ... 所有的变量和function都在这里声明,并且作用域也只能在这个匿名闭包里
    // ...但是这里的代码依然可以访问外部全局的对象
}());

你也可以这样声明,

(function () {/* 内部代码 */})();

 

引用全局变量

(function ($, YAHOO) {
    // 这里,我们的代码就可以使用全局的jQuery对象了,YAHOO也是一样
} (jQuery, YAHOO));

不过,有时候可能不仅仅要使用全局变量,而是也想声明全局变量,如何做呢?我们可以通过匿名函数的返回值来返回这个全局变量,这也就是一个基本的Module模式,来看一个完整的代码:

var blogModule = (function () {
    var my = {}, privateName = "博客园";

    function privateAddTopic(data) {
        // 这里是内部处理代码
    }

    my.Name = privateName;
    my.AddTopic = function (data) {
        privateAddTopic(data);
    };

    return my;
} ());

 

posted @ 2015-08-26 14:30  Zell~Dincht  阅读(306)  评论(0编辑  收藏  举报