2

我怎样才能使它app.locals.user成为返回值而不是函数?现在我必须跑app.locals.user().name

我怎样才能做到,这样我就可以跑了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;
            }
        };
4

3 回答 3

2

只是return whateverVariable;

没有输入 Javascript,因此您实际上无法将其放入函数签名中。

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

var y = foo();
debug(y.a);  //prints 10
于 2012-05-24T21:16:35.010 回答
1

您可以立即执行该函数以将结果存储为变量:

 app.locals.user = (function(){
            if(typeof(req.session.user) != 'undefined'){
                console.log(req.session.user.name.full);
                return req.session.user;
            }else{
                return false;
            }
        })();
于 2012-05-24T22:17:28.547 回答
1

好吧,你可以使用__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;
    }
});

编辑: __defineGetter__ 似乎已被弃用,这是一个更好的方法:

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;
    }
});
于 2012-05-25T09:31:31.790 回答