[ascoders] AW: Namensräume

Hallo,

> Was denkt ihr?

Großartige Idee. Mein Ansatz (Erklärung unten):


----------------------------------------------------------------------------
-------------------

_global.Namespaces = new Object();

_global.AsSetupPackage = function(path) {
        var a = path.split('.');
        var o = _global;
        for (var i = 0; i < a.length; i++) {
                var name = a[i];
                if (o[name] == undefined) {
                        o[name] = new Object();
                }
                o = o[name];
        }
        Namespaces[path] = o;
}

_global.__resolve = function(c) {
        var nameSpaceFound = false;
        for (tmpNS in Namespaces) {
                if (typeof Namespaces[tmpNS][c] == "function") {
                        return Namespaces[tmpNS][c];
                }
        }
        return null;
}

// -------------- test

AsSetupPackage("test");

_global.test.TestClass = function(x) {
        trace("constructor of test, parameter: " + x);
}

var test1 = new test.TestClass(1);
var test2 = new TestClass(2);

// -------------- output

// constructor of test, parameter: 1
// constructor of test, parameter: 2

----------------------------------------------------------------------------
-------------------


Funktionsweise:

_global.Namespaces dient als Ankerpunkt zum Durchsuchen der Namensräume
(damit nicht _global durchsucht werden muss, sondern wirklich nur die
Namensräume)

In dieser Form fumpt das ganze nur für Namensräume der Tiefe 1 (also "test",
aber nicht "test.blah"). Für beliebige Tiefe müsste die __resolve-Funktion
rekursiv sein... bin ich jetzt zu müde für :). Werd ich morgen testen.

Das müsste man dann noch mit deiner AsSelectPackage-Funktion verknüpfen,
damit zuerst im ausgewählten Package gesucht wird, und nicht das erste
passende von _global.Namespaces aus genommen wird.

Statt dessen könnte vielleicht die __resolve-Funktion sowas wie
"AsGetPackage(arguments.caller.callee)" benutzten, um automatisch das
Package der aufrufenden Klasse zuerst zu durchsuchen.


------------------------------------------------------
Archiv   : http://www.freelists.org/archives/ascoders/
Optionen : http://www.freelists.org/list/ascoders
------------------------------------------------------

Other related posts: