Javascript访问对象内的对象方法

时间:2018-04-28 14:33:31

标签: javascript object module

首先,我知道在this的帮助下,可以访问javascript对象中的属性或方法,但在我的示例中并不起作用。

module.exports = {
    explanations: {
        '--help': 'show help',
        '--connection': 'list connections'
    },
    connections: {
        'a': '1',
        'b': '2',
        'c': '3'
    },
    manPageOfObject: function(object) {
         var output = '';
         var keys = Object.keys(object);
         for (var i in keys) {
              output += keys[i] + ': ' + object[keys[i]] + '\n';
         }
         return output;
   },
   manPages: {
       '--help': function() { return this.manPageOfObject(this.explanations); }
       '--connections': function() { return this.manPageOfObject(this.connections); }
   }
}

函数manPageOfObject应该返回一个字符串/"手册页"一个对象。

然后我想打印一个"手册页"喜欢:

var myModule = require('xyz.js');

var manPage = myModule.manPages['--help'];
console.log(manPage());

但是有些东西没有正常工作,我得到错误this.manPageOfObject不是一个功能。但我很确定它是一个,不是吗?

我感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:1)

您有嵌套对象,这意味着您没有一个上下文。

manPageOfObject位于myModule。因此,对于查找manPageOfObject的函数,它必须具有this对象的上下文(myModule)。

现在,manPage是它自己的一个对象。它没有manPageOfObject属性。因此,如果你只是manPage.something(),而something()尝试使用manPageOfObject属性,则会找不到它,因为manPage没有。{/ p>

您必须将myModule.manPage['--help']绑定到myModulemyModule.manPage['--help'].bind(myModule)),才能在manPageOfObject中选择this

var myModule = {
  explanations: {
    '--help': 'show help',
    '--connection': 'list connections'
  },
  connections: {
    'a': '1',
    'b': '2',
    'c': '3'
  },
  manPageOfObject: function(object) {
    var output = '';
    var keys = Object.keys(object);
    for (var i in keys) {
      output += keys[i] + ': ' + object[keys[i]] + '\n';
    }
    return output;
  },
  manPage: {
    '--help': function() {
      return this.manPageOfObject(this.explanations);
    },
    '--connections': function() {
      return this.manPageOfObject(this.connections);
    }
  }
};
var manPage = myModule.manPage['--help'].bind(myModule);
console.log(manPage());

答案 1 :(得分:0)

尝试运行时会出现什么错误?这可能是一个很好的暗示。

var manPage = myModule.manPages['--help'];
                               ^
TypeError: Cannot read property '--help' of undefined

你有一个错字。您导出的manPage不是manPages。您的下一个问题将是this来自哪里。