2012-05-24 75 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