2012-05-24 77 views
2

如何使此app.locals.user成为返回值而不是函数?现在我必须运行app.locals.user().name使功能返回到变量的Javascript

我该怎么做才能运行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; 
      } 
     }; 

回答

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; 
    } 
}); 
2

只是return whateverVariable;

JavaScript是不是类型化,所以你真的不能做任何事情来把这个函数签名。

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

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

在此刻,我正在返回函数,有没有办法让它成为内联变量? –

+0

'app.locals.user()'? – djechlin

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; 
      } 
     })(); 
+0

但如果变量更改不会更新它正确? –

+0

@VartanArabyan,这是真的,但我认为这就是你要求的。你不能有一个自动更新自己的变量 - 如果这是你想要的,然后使它成为一个函数,并且每次调用它。 – Zach