首先,我知道在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
不是一个功能。但我很确定它是一个,不是吗?
我感谢任何帮助。感谢。
答案 0 :(得分:1)
您有嵌套对象,这意味着您没有一个上下文。
manPageOfObject
位于myModule
。因此,对于查找manPageOfObject
的函数,它必须具有this
对象的上下文(myModule
)。
现在,manPage
是它自己的一个对象。它没有manPageOfObject
属性。因此,如果你只是manPage.something()
,而something()
尝试使用manPageOfObject
属性,则会找不到它,因为manPage
没有。{/ p>
您必须将myModule.manPage['--help']
绑定到myModule
(myModule.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
来自哪里。