`
sunxuetao2010
  • 浏览: 2970 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

js 模块化设计模式的一点见解

    博客分类:
  • js
阅读更多

模块化模式可以帮助我们组织代码,尤其是随着代码的增长。有别于其他的语言,js没有特定的语法支持包,但是模块化设计模式提供了创建自我包容并减少代码碎片, 这种模式可以被认为是根据你的软件代码的需求进行函数式的可添加替换或删除。

模块化模式是几种模式的集合:

命名空间

函数及时实现

私有和专有成员

声明式依赖

首先,我们先用命名空间函数开始一个有用的模块例子,提供了一个数组:

MYAPP.namespace('MYAPP.utilities.array');

下一步定义模块。这个模式利用及时执行函数提供私有作用域。及时执行函数返回一个对象---事实上的模块和他的公共接口,提供了用户这个模块的接口。

 

MYAPP.utilities.array = (function () {

    return {

        // todo...

    };

}());

下一步,添加方法和公共接口:

MYAPP.utilities.array = (function () {

    return {

        inArray: function (needle, haystack) {

            // ...

        },

        isArray: function (a) {

            // ...

        }

    };

}());

用及时执行函数提供的私有作用域,你可以声明一些私有的属性和方法,在及时执行函数的顶端,你也可以道行明任何你的模块拥有的依赖,跟着 变量的声明,你可以吧帮助设置模块化的代码选择性的一次初始化。最后的结果是一个及时执行函数返回的一个对象,包含公共接口和模块:

MYAPP.namespace('MYAPP.utilities.array');

MYAPP.utilities.array = (function () {

        // dependencies

    var uobj  = MYAPP.utilities.object,

        ulang = MYAPP.utilities.lang,

        // private properties

        array_string = "[object Array]",

        ops = Object.prototype.toString;

        // private methods

        // ...

        // end var

    // optionally one-time init procedures

    // ...

    // public API

    return {

        inArray: function (needle, haystack) {

            for (var i = 0, max = haystack.length; i < max; i += 1) {

                if (haystack[i] === needle) {

                    return true;

                }

            }

        },

        isArray: function (a) {

            return ops.call(a) === array_string;

        }

        // ... more methods and properties

    };

}());

模块模式是广泛应用和高度提倡的组织代码的方式,特别是增长型的代码。

 

 

揭露模块模式

 

我们已经在看私有模式时讨论过揭露模式。模块模式可以被看做所有方法都是私有的并仅仅暴露出那些你最终决定的公共api。

以上可转换为:

MYAPP.utilities.array = (function () {

        // private properties

    var array_string = "[object Array]",

        ops = Object.prototype.toString,

        // private methods

        inArray = function (haystack, needle) {

            for (var i = 0, max = haystack.length; i < max; i += 1) {

                if (haystack[i] === needle) {

                    return i;

                }

            }

            return −1;

        },

        isArray = function (a) {

            return ops.call(a) === array_string;

        };

        // end var

    // revealing public API

    return {

        isArray: isArray,

        indexOf: inArray

    };

}());

 

模块创建构造器

上述的例子产生了一个 Myapp.utilities.array 对象, 但是有时使用构造函数创建对象更方便,你可以用模块化来做。

惟一的区别是及时执行函数包装了模块,返回一个函数不是一个对象。

MYAPP.namespace('MYAPP.utilities.Array');

MYAPP.utilities.Array = (function () {

        // dependencies

    var uobj  = MYAPP.utilities.object,

        ulang = MYAPP.utilities.lang,

        // private properties and methods...

        Constr;

        // end var

    // optionally one-time init procedures

    // ...

    // public API -- constructor

    Constr = function (o) {

        this.elements = this.toArray(o);

    };

    // public API -- prototype

    Constr.prototype = {

        constructor: MYAPP.utilities.Array,

        version: "2.0",

        toArray: function (obj) {

            for (var i = 0, a = [], len = obj.length; i < len; i += 1) {

                a[i] = obj[i];

            }

            return a;

        }

    };

    // return the constructor

    // to be assigned to the new namespace

    return Constr;

}());

 

使用方式:

var arr = new MYAPP.utilities.Array(obj);

 

模块中引入全局变量

再一个共同的变化模式中,你可以传递参数给包了模块的及时执行函数,你可以传递任何参数,但是通常是全聚德变量的引用,或者是全局变量本身,引入全局变量帮众加快全局符号的解决,因为导入的变量变成了本地

 

MYAPP.utilities.module = (function (app, global) {

    // 全局对象的引用

    // 全局程序的命名空间对象

    // 都变成本地变量

}(MYAPP, this));

分享到:
评论

相关推荐

    Node.js Design Patterns Second Edition.pdf (node.js 设计模式)高清

    ### Node.js设计模式第二版 #### 一、概述 《Node.js Design Patterns Second Edition》(Node.js设计模式第二版)是一本深入探讨Node.js高级编程技术的书籍,它旨在帮助开发者充分利用Node.js的强大功能和最佳...

    大型JavaScript应用程序架构模式(1)

    这包括模块化、服务导向架构(SOA)、微服务等高级概念。这些模式有助于将复杂系统分解为更小、更易管理的部分,同时也提高了系统的可扩展性和灵活性。 ### JavaScript模式:组织应用程序的策略 JavaScript模式...

    JavaScript模式

    基于给定的信息“JavaScript模式”,我们可以深入探讨书中所涉及的各种设计模式、编程技巧以及最佳实践。本书由Stoyan Stefanov撰写,陈新翻译,主要针对JavaScript开发者,旨在帮助他们理解并应用各种软件设计模式...

    JavaScript5件套

    其次,"JavaScript 设计模式"可能是同一主题的另一版本,不同的作者可能会有独特的见解和解释,这将为读者提供更全面的理解。设计模式的应用不仅可以提高代码质量,还能促进团队间的沟通,因为大家都遵循了一套通用...

    JavaScript Programming

    本书还强调了编写高质量JavaScript代码的重要性,介绍了一系列最佳实践和设计模式,如单一职责原则、开闭原则、依赖倒置原则等,帮助开发者构建可扩展、可维护的代码库。同时,书中还讨论了常见的设计模式,如工厂...

    基于MVC的JavaScript Web富应用开发

    MVC(Model-View-Controller)是一种广泛应用于软件工程的设计模式,尤其在Web开发领域中,它能有效地分离业务逻辑、数据处理和用户界面,从而提高代码的可维护性和可扩展性。 在JavaScript的Web富应用开发中,MVC...

    jquery之父写的javascript

    - **设计模式应用**:书中还探讨了如何将面向对象的设计模式应用于JavaScript编程中,包括工厂模式、单例模式等,以此提高代码的复用性和可维护性。 - **性能优化技巧**:针对JavaScript运行时可能会遇到的性能...

    精通javascript

    这不仅包括语言的基础语法,更涵盖了面向对象编程、函数式编程、异步编程、DOM操作、事件处理、模块化设计以及性能优化等高级主题。通过学习本书,读者将能够构建出高效、可维护且具备良好用户体验的Web应用。 描述...

    Maintainable+JavaScript(编写可维护的JavaScript).pdf

    书中深入探讨了JavaScript代码结构的最佳实践,包括但不限于模块化设计、封装、继承等概念。通过引入设计模式,如工厂模式、策略模式、观察者模式等,帮助开发者构建更加健壮和灵活的代码架构。 ### 三、性能优化与...

    Javascript的设计失误-蒋豪群.zip

    CommonJS和AMD(RequireJS)是早期常用的模块化方案,但现在ES6的import/export提供了原生支持。 6. 函数参数:JavaScript函数不检查参数数量,这可能导致错误难以发现。使用默认参数和rest参数可以改善这个问题,...

    关于如何编写优美的JavaScript代码之我见

    此外,模块化编程是提高源码组织性的有效手段,通过使用CommonJS或ES6的import/export语法,可以将代码分割成独立的模块,降低代码之间的耦合度。 其次,利用工具提升开发效率和代码质量。例如,使用ESLint这样的...

    presentations:演示JavaScript模式

    在"presentations:演示JavaScript模式"这个主题中,我们将会深入探讨JavaScript的各种设计模式和最佳实践,这些内容通常在技术演讲或研讨会中被讲解。Derkoe,可能是一位知名的IT专家或讲师,分享了他的见解和经验,...

    easymock

    《JavaScript模式》的作者Stoyan Stefanov是一位经验丰富、见解独到的前端专家,其作品中提出的众多设计模式和最佳实践,涵盖了函数式编程、对象和类、事件处理、模块化等方面。这些内容不仅为初学者提供了良好的...

    Packt.Publishing.Object.Oriented.JavaScript.Jul.2008.pdf

    - **模块化**:将程序分解成独立的模块,每个模块负责特定的功能。这有助于提高代码的可读性和可维护性。 - **命名空间**:为了避免全局变量污染,可以使用命名空间来组织代码,例如使用对象作为容器来包含相关的...

    高性能JavaScript(High Performance JavaScript )

    - **模块化设计**:通过将代码组织成模块,不仅可以提高代码的可维护性,还可以通过按需加载的方式优化性能。 - **错误处理与调试**:了解并掌握使用各种调试工具,如Chrome DevTools,对于定位和解决性能问题至关...

Global site tag (gtag.js) - Google Analytics