Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Aliasing a function object in JavaScript

Disclaimer: I am using ExtJS 3, but I don't think it's very relevant to the question, outside of the common use of it's namespacing function.

I have a singleton that's declared in a really long namespace like this:

Ext.ns("REALLY.REALLY.LONG.NAMESPACE");

var Singleton = (function() {   
    var foo = {
        bar: "baz"
    }; 

    var privateFunction = function(param){
        // ...
        return foo;
    };

    var single = Ext.extend(Object, {
        constructor: function(config) {
            Ext.apply(this, config);
        },
        otherFunction: privateFunction,     
        publicFunction: function (someObject){
            // do stuff with someObject
        }
    });

    return single;

})();
// Make it a singleton
REALLY.REALLY.LONG.NAMESPACE.Singleton = new Singleton();

I use it in other modules via calls like REALLY.REALLY.LONG.NAMESPACE.Singleton.otherFunction(); and REALLY.REALLY.LONG.NAMESPACE.Singleton.publicFunction(myObject); . I'm wondering if I can swap out those calls by setting up the client module with an alias to the singleton, i.e. var singleton = REALLY.REALLY.LONG.NAMESPACE.Singleton; , so that I can call singleton.otherFunction();. I'm wondering if this is an anti-pattern , or if there are any pitfalls (memory?) I might run into through this usage.

Thanks StackOverflow!

like image 375
blong Avatar asked Dec 10 '25 13:12

blong


1 Answers

I'm wondering if I can swap out those calls by setting up the client module with an alias to the singleton

Yes, you can.

I'm wondering if this is an anti-pattern , or if there are any pitfalls (memory?) I might run into through this usage.

No, there aren't any that I can think of and it is faster than calling the fully-qualified version.

Local Alias Pattern


Example:

function somefunc(){
    var singleton = REALLY.REALLY.LONG.NAMESPACE.Singleton;

    singleton.publicFunction();
};

Or:

(function somfunc(singleton){

}(REALLY.REALLY.LONG.NAMESPACE.Singleton));

Test Results:

http://jsfiddle.net/jMg9A/

like image 165
Alex Avatar answered Dec 13 '25 02:12

Alex



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!