2012-12-04 119 views
0

我在這裏要做的是從同一對象的ready函數內訪問context屬性(或更具體地說是context.settings)。我不確定這樣做的正確語法是什麼。從同一對象內的函數訪問對象屬性

下面的代碼:

module.exports = { 
    context: { 
     settings: require('./settings') 
    }, 
    listen: function(callback) { 
     listen(context.settings.http.port); 
     callback(null); 
    }, 
    ready: function (err) { 
     if (err) 
     { 
     throw err; 
     } 
     console.log("Ready and listening at http://localhost:" + context.settings.http.port); 
    } 
}; 

只是爲了澄清,我指的是行console.log("Ready and listening at http://localhost:" + context.settings.http.port);

編輯:一點更多的內容(公頃)

我也嘗試this.context.settings.http.port,但我得到 TypeError: Cannot read property 'settings' of undefined

這裏是settings.js內容,只是要確定...

module.exports = { 
    db: { 
    host: '127.0.0.1', 
    port: 27017, 
    name: 'jsblogdemo' 
    }, 
    http: { 
    port: 3000 
    } 
}; 

謝謝!

回答

2

另一種可能性是:

module.exports = (function() { 
    var context = { 
     settings: require('./settings') 
    }, 
    listen = function(callback) { 
     listen(context.settings.http.port); 
     callback(null); 
    }, 
    ready = function (err) { 
     if (err) 
     { 
     throw err; 
     } 
     console.log("Ready and listening at http://localhost:" + 
        context.settings.http.port); 
    }; 

    return { 
     // context: context, // needed? 
     listen: listen, 
     ready: ready 
    }; 
}()); 

然後功能有沒有關於他們如何叫任何後顧之憂本地訪問來context對象。如果你喜歡,context對象可以保持完全私密。

+0

完美的,正是我想要做的。 – Zen

0

只要方法沒有被綁定到另一個上下文callapply,this引用當前的對象上下文。例如,使用:

console.log(this.context.settings.http.port); 

打印偵聽端口。

1

如果它是一個單一的,靜態的對象,你可以只是做:

module.exports.context.settings 

如果你想有一個永久綁定this,使用.bind()

module.exports = { 
    context: { 
     settings: require('./settings') 
    } 
} 
module.exports.listen = function(callback) { 
    listen(this.context.settings.http.port); 
    callback(null); 
}.bind(module.exports); 

module.exports.ready = function (err) { 
    if (err) { 
     throw err; 
    } 
    console.log("Ready and listening at http://localhost:" + this.context.settings.http.port); 
}.bind(module.exports); 
+0

爲主帖 – Zen

+0

增加了一些上下文,當它們與第二個例子中單獨定義的時候一樣正常工作 - 謝謝! – Zen

+0

不客氣。 –