Vartan Arabyan
Vartan Arabyan

Reputation: 3073

Javascript making the return of a function into a variable

How can I make this app.locals.user to be the return value instead of a function? Right now I have to run app.locals.user().name.

How can I make it so I can just run app.locals.user.name?

    app.locals.user = function(){
            if(typeof(req.session.user) != 'undefined'){
                console.log(req.session.user.name.full);
                return req.session.user;
            }else{
                return false;
            }
        };

Upvotes: 2

Views: 169

Answers (3)

Romain Meresse
Romain Meresse

Reputation: 3044

Well, you could use __defineGetter__ :

app.locals.__defineGetter__("user", function() {
    if(typeof(req.session.user) != 'undefined') {
        console.log(req.session.user.name.full);
        return req.session.user;
    } else {
        return false;
    }
});

Edit : __defineGetter__ seems to be deprecated, here is a better way :

Object.defineProperty(app.locals, "user", { get : function() {
    if(typeof(req.session.user) != 'undefined') {
        console.log(req.session.user.name.full);
        return req.session.user;
    } else {
        return false;
    }
});

Upvotes: 1

Zach
Zach

Reputation: 7940

You can immediately execute the function in order to store the result as a variable:

 app.locals.user = (function(){
            if(typeof(req.session.user) != 'undefined'){
                console.log(req.session.user.name.full);
                return req.session.user;
            }else{
                return false;
            }
        })();

Upvotes: 1

djechlin
djechlin

Reputation: 60808

just return whateverVariable;

Javascript isn't typed so you can't really do anything to put this in the function signature.

function foo() {
    var x = { a : 10, b : 20};
    return x;
}

var y = foo();
debug(y.a);  //prints 10

Upvotes: 2

Related Questions