gpt4 book ai didi

Javascript 访问对象内的对象方法

转载 作者:行者123 更新时间:2023-12-03 02:00:01 24 4
gpt4 key购买 nike

首先,我知道借助 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 不是函数。但我很确定它是一个,不是吗?

我很感激任何帮助。谢谢。

最佳答案

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

manPageOfObject 位于 myModule。因此,对于要查找 manPageOfObject 的函数,它必须将 myModule 对象作为上下文(如 this)。

现在,manPage 是它自己的一个对象。它没有 manPageOfObject 属性。因此,如果您只是执行 manPage.something(),并且 something() 尝试使用 manPageOfObject 属性,它将找不到它,因为manPage 没有。

您必须将 myModule.manPage['--help'] 绑定(bind)到 myModule (myModule.manPage['--help'].bind( myModule)) 以便能够在 this 中选择 manPageOfObject:

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

关于Javascript 访问对象内的对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50077634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com