簡體   English   中英

在節點module.exports中的對象方法中使用'this'

[英]Using 'this' in object method in node module.exports

這是我的模塊:

module.exports = {

    name: '',
    email: '',
    id: '',
    provider: '',
    logged_in: false,

    isLoggedIn: function(req, res, next){
        console.log(this);

    }   
};

我這樣導入:

var user = require('user');

當我將isLoggedIn函數與Express一起使用時,控制台將記錄全局Node對象。 如何獲取記錄功能所在的對象的信息?

編輯

所以我有我上面定義的用戶對象。 根據各種因素,此對象將填充到程序的其他位置。 我用來創建一個中間件函數來表示要快速測試用戶的登錄狀態。放置此函數的明顯位置似乎在用戶對象中,但是我需要訪問logging_in屬性以對其進行正確評估。 因此使用this.logged_in。

您應該使用IIFE:

module.exports = (function() {
    return {
      name: '',
      email: '',
      id: '',
      provider: '',
      logged_in: false,

      isLoggedIn: function(req, res, next){
        console.log(this);
      }   
   }
})();

您可以在此處閱讀有關內容: http : //designpepper.com/blog/drips/an-introduction-to-iifes-immediately-invoked-function-expressions

當您將其作為中間函數傳遞時,我相信您正在做類似

func(.., user.isLoggedIn, ..)

當您這樣做時,實際上是在將isLoggedInuser對象分離。 因此,在默認情況下,如果不是在嚴格模式下, this將涉及到全局對象。 要解決這個問題,您應該像這樣bind函數

func(.., user.isLoggedIn.bind(user), ..)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM