美文网首页
JacaScript 私有变量(三)模块模式

JacaScript 私有变量(三)模块模式

作者: BertFu | 来源:发表于2016-11-25 07:44 被阅读8次

模块模式是为单例创建私有变量和特权方法。所谓单例,指的就是只有一个实例对象。按照惯例, JavaScript 是以对象字面量的方法来创建单例对象的:

var singleton = {
    name: value,
    method: function() {
        // 这里是方法的代码
    }
}

模块模式通过为单例添加私有变量和特权方法能够使其得到增强:


var singleton = function() {
    // 私有变量
    var privateVariable = 10;
    function privateFunction() {
        return false;
    }

    // 特权/公有方法和属性
    return {
        publicProperty: true,
        publicMethod: function() {
            privateVariable++;
            return privateFunction();
        }
    }
}

这个模块模式使用了一个返回对象的匿名函数。在这个匿名函数内部,首先定义了私有变量和函数。然后,将一个对象字面量作为函数的值放回。返回的对象字面量中只包含可以公开的属性和方法。

由于这个对象是在匿名函数内部定义的,因此它的公有方法有权访问私有变量和函数。从本质上来讲,这个对象字面量定义的是单例的公共接口。

这种模式在需要对单例进行某些初始化同时有需要维护其私有变量时时非常有用的。

var application = function() {
    // 私有变量和函数
    var components = new Array();

    // 初始化
    components.push(new Object());

    // 公共
    return {
        getComponentCount: function() {
            return components.length;
        },
        registerComponent: function(component) {
            if(typeof component == "object") {
                components.push(component);
            }
        }
    }
}();

在Web应用程序中,经常需要使用一个单例来管理应用程序级的信息。这个简单的例子创建了一个用于管理组件的 application 对象。

在创建这个对象的过程中,首先声明了一个私有的 components 数组,并向数组添加了一个 Object() 对象。而返回对象的 getComponentCount() 和 registerComponent() 方法,都是有全访问数组 components 的特权方法。

前者只是返回已注册的组件数目,后者用于注册新组件。

如果必须创建一个对象并以某写数组对其进行初始化,同时还要公开一些能够访问这些私有数据的方法,那么就可以使用模块模式。

以这种模式创建的每个单例都是 Object 的实例,因为最终要通过一个对象字面量来表示它。

毕竟,单例通常都是作为全局对象存在的,我们不会将它传递给一个函数。因此,也就没有什么必要使用 instanceof 操作符来检查其对象类型了。

相关文章

  • JacaScript 私有变量(三)模块模式

    模块模式是为单例创建私有变量和特权方法。所谓单例,指的就是只有一个实例对象。按照惯例, JavaScript 是以...

  • JacaScript 私有变量(四)增强的模块模式

    有人进一步改进了模块模式,即在返回对象之前加入对其增强的代码。这种增强的模块模式适合那些单例必须是某种类型和的实例...

  • JS设计模式三:模块模式

    模块模式简述 模块模式是为单例模式添加私有变量和私有方法,并减少全局变量的使用;如下就是一个模块模式的代码结构: ...

  • JavaScript作用域

    1.块级作用域 2.私有变量 3.静态私有变量 4.模块模式 5.增强的模块模式

  • JacaScript 私有变量(二)静态私有变量

    通过在私有作用域中定义私有变量或函数,同样也可以创建特权方法: 这个模式创建了一个私有作用域,并在其中封装了一个构...

  • 模块模式

    模块模式 模块 模式实在单例对象上加上扩展,通过作用域链来关联私有变量和特权方法对象字面量封装模块,闭包实现私有和...

  • JacaScript 私有变量(一)什么是私有变量

    严格来讲,JavaScript 中没有私有成员的概念;所有对象属性都是公有的。不过,倒是有一个私有变量的概念。 任...

  • 【JS第33期】设计模式-模块模式

    模块模式通过为单例添加私有变量和特权方法能够使其得到增强,语法如下: 增强模块模式 增强模块模式,即在返回对象之前...

  • 2018-12-07

    7.4.2 模块模式 前面的模式是用于为自定义类型创建私有变量和特权方法的。而道格拉斯所说的模块模式则是为单例创建...

  • 2018-12-06

    7.4.1 静态私有变量 通过在私有作用域中定义私有变量或函数,同样也可以创建特权方法,其基本模式如下: 这个模式...

网友评论

      本文标题:JacaScript 私有变量(三)模块模式

      本文链接:https://www.haomeiwen.com/subject/vauipttx.html