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

callメソッドがまたはによって別のコンテキストにバインドされていない限り、現在のオブジェクト コンテキストを参照しますapplythisたとえば、次を使用します。

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

リスニング ポートを出力します。

于 2012-12-04T03:25:05.823 に答える