Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从同一对象内的函数访问对象属性_Javascript_Oop_Node.js_Express - Fatal编程技术网

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

Javascript 从同一对象内的函数访问对象属性,javascript,oop,node.js,express,Javascript,Oop,Node.js,Express,我在这里尝试的是从同一对象中的ready函数中访问context属性(或者更具体地说是context.settings)。我不确定这样做的正确语法是什么 代码如下: module.exports = { context: { settings: require('./settings') }, listen: function(callback) { listen(context.settings.http.port); callb

我在这里尝试的是从同一对象中的
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(“准备好并在http://localhost:“+context.settings.http.port)

编辑:多一点上下文(ha)

我确实尝试了
这个.context.settings.http.port
,但是我得到了
TypeError:无法读取未定义的属性“设置”

以下是
settings.js
的内容,只是为了确保

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

谢谢

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

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

打印侦听端口。

只要一个方法没有通过
调用
应用
绑定到另一个上下文,
引用当前对象上下文。例如,使用:

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

要打印侦听端口。

如果是单个静态对象,您可以执行以下操作:

module.exports.context.settings
如果要永久绑定此
,请使用
.bind()


如果是单个静态对象,您可以执行以下操作:

module.exports.context.settings
如果要永久绑定此,请使用
.bind()


另一种可能性是:

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

然后这些函数就可以本地访问
上下文
对象,而不必担心如何调用它们。如果您愿意,
上下文
对象可以完全私有。

另一种可能性是:

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

在主postworks中添加了更多的上下文,当它们像您在第二个示例中那样单独定义时,就很好了-谢谢!当它们像第二个例子中那样被单独定义时,可以为主要的博文添加更多的上下文-谢谢!完美,正是我想做的。完美,正是我想做的。