2012-05-24 12 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; 
    } 
}); 

Edit: __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

Смежные вопросы