名前空間を宣言するための関数

by opengl_8080

HTML

<h2>参考</h2>
<a href="http://www.oreilly.co.jp/books/9784873114880/">O'Reilly Japan - JavaScriptパターン</a>

<div id="console"></div>

JavaScript

function namespace(base, ns) {
    var parts = ns.split('.');
    var parent = base;
    
    for (var i=0; i<parts.length; i++) {
        if (typeof parent[parts[i]] === 'undefined') {
            parent[parts[i]] = {};
        }
        parent = parent[parts[i]];
    }
    return parent;
}

var mine = mine || {};

(function() {
    namespace(mine, 'hoge.fuga');
    
    mine.hoge.fuga.myFunc = function(message) {
        var console = document.getElementById('console');
        console.innerHTML = message;
    };
    
    mine.hoge.fuga.myFunc('hello namespace');
}());

/* 
mine.namespace = function(ns_string) {
    var parts = ns_string.split('.'),
        parent = mine,
        i;
    
    console.log('1: ' + parts);
    
    if (parts[0] === 'mine') {
        parts = parts.slice(1);
        console.log('2: ' + parts);
    }
    
    for (i = 0; i < parts.length; i++) {
        console.log('i=' + i + ', parent=' + parent);
        if (typeof parent[parts[i]] === 'undefined') {
            parent[parts[i]] = {};
        }
        parent = parent[parts[i]];
    }
    return parent;
};
//*/