• JavaScript Patterns 5.1 Namespace Pattern


    global namespace object

    // global object
    
    var MYAPP = {};
    
    // constructors
    
    MYAPP.Parent = function() {
    };
    
    MYAPP.Child = function() {
    };
    
    // a variable
    
    MYAPP.some_var = 1;
    
    // an object container
    
    MYAPP.modules = {};
    
    // nested objects
    
    MYAPP.modules.module1 = {};
    
    MYAPP.modules.module1.data = {
        a : 1,
        b : 2
    };
    
    MYAPP.modules.module2 = {};

    Drawbacks

    • A bit more to type; prefixing every variable and function does add up in the total amount of code that needs to be downloaded

    • Only one global instance means that any part of the code can modify the global instance and the rest of the functionality gets the updated state

    • Long nested names mean longer (slower) property resolution lookups

    General Purpose Namespace Function

    // unsafe
    
    var MYAPP = {};
    
    // better
    
    if ( typeof MYAPP === "undefined") {
    
        var MYAPP = {};
    
    }
    
    // or shorter
    
    var MYAPP = MYAPP || {};
    
    // using a namespace function
    
    MYAPP.namespace('MYAPP.modules.module2');
    
    // equivalent to:
    
    // var MYAPP = {
    
    //      modules: {
    
    //              module2: {}
    
    //      }
    
    // };
    
    MYAPP.namespace = function(ns_string) {
    
        var parts = ns_string.split('.'), parent = MYAPP, i;
    
        // strip redundant leading global
    
        if (parts[0] === "MYAPP") {
    
            parts = parts.slice(1);
    
        }
    
        for ( i = 0; i < parts.length; i += 1) {
    
            // create a property if it doesn't exist
    
            if ( typeof parent[parts[i]] === "undefined") {
    
                parent[parts[i]] = {};
    
            }
    
            parent = parent[parts[i]];
    
        }
    
        return parent;
    
    };
    
    // assign returned value to a local var
    
    var module2 = MYAPP.namespace('MYAPP.modules.module2');
    
    module2 === MYAPP.modules.module2;
    // true
    
    // skip initial `MYAPP`
    
    MYAPP.namespace('modules.module51');
    
    // long namespace
    
    MYAPP.namespace('once.upon.a.time.there.was.this.long.nested.property');

     References: 

    JavaScript Patterns - by Stoyan Stefanov (O`Reilly)

  • 相关阅读:
    servlet规范核心类图
    策略模式
    掌握Spark机器学习库-07-回归算法原理
    掌握Spark机器学习库-07-线性回归算法概述
    掌握Spark机器学习库-07-回归分析概述
    掌握Spark机器学习库-06-基础统计部分
    掌握Spark机器学习库-05-spark中矩阵与向量的使用
    测试开发要懂的设计模式知识
    数据可视化工具-ECharts
    掌握Spark机器学习库-02-mllib数据格式
  • 原文地址:https://www.cnblogs.com/haokaibo/p/Namespace-Pattern.html
Copyright © 2020-2023  润新知