0

我在这里尝试做的是从同一个对象的函数中访问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
  }
};

谢谢!

4

3 回答 3

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对象可以完全保密。

于 2012-12-04T03:42:48.810 回答
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);
于 2012-12-04T03:25:41.097 回答
0

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

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

打印监听端口。

于 2012-12-04T03:25:05.823 回答