从同一对象中的函数访问对象属性

时间:2012-12-04 03:21:38

标签: javascript oop node.js express

我在这里要做的是从同一对象的context函数中访问context.settings属性(或更具体地说是ready)。我不确定这样做的正确语法是什么。

这是代码:

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

编辑:更多上下文(ha)

我确实试过了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
  }
};

谢谢!

3 个答案:

答案 0 :(得分: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对象可以完全保密。

答案 1 :(得分: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);

答案 2 :(得分:0)

只要方法没有被callapply绑定到另一个上下文,this就会引用当前的对象上下文。例如,使用:

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

打印侦听端口。