使用函数参数访问 JavaScript 中的对象
Accessing an object in JavaScript with argument of function
我想用 JS 做一个 "shopping list"。我在使用函数参数访问对象时遇到问题。
shopList = {
create: function createList(listName) {
listName = {};
listName["Banana"] = 2
},
output: function output(listName) {
console.log(listName)
},
};
shopList.create('list')
shopList.output('list')
当我运行shopList.output'list'返回。如何通过参数访问对象?希望这不是重复的,现在已经谷歌搜索了几个小时,但没有取得任何进展。
如果您希望能够使用动态名称配置列表,则需要使用 bracket notation 在 this
对象中创建列表。像这样:
var shopList = {
create: function createList(listName) {
this[listName] = {};
this[listName]["Banana"] = 2
},
output: function output(listName) {
return this[listName];
}
};
shopList.create('list');
console.log(shopList.output('list'));
但是,正如@armchairdj 在评论中指出的那样,最好创建一个容器,专门 属性 来保存列表:
var shopList = {
lists: {},
create: function createList(listName) {
this.lists[listName] = {};
this.lists[listName]["Banana"] = 2
},
output: function output(listName) {
return this.lists[listName];
}
};
如果您想避免通过天真地添加用户提供的任意键来破坏 showList 对象的方法,您应该为您的列表创建一个内部名称空间。
var shopList = {
lists: {},
create: function (listName) {
this.lists[listName] = this.lists[listName] || {};
this.lists[listName].Banana = 2;
},
output: function (listName) {
var list = this.lists[listName];
if (!list) {
return console.log('No list named ' + listName + ' found.');
}
console.log(list)
}
};
shopList.create('output');
shopList.output('output');
shopList.create('foo');
shopList.output('foo');
shopList.output('bar');
我想用 JS 做一个 "shopping list"。我在使用函数参数访问对象时遇到问题。
shopList = {
create: function createList(listName) {
listName = {};
listName["Banana"] = 2
},
output: function output(listName) {
console.log(listName)
},
};
shopList.create('list')
shopList.output('list')
当我运行shopList.output'list'返回。如何通过参数访问对象?希望这不是重复的,现在已经谷歌搜索了几个小时,但没有取得任何进展。
如果您希望能够使用动态名称配置列表,则需要使用 bracket notation 在 this
对象中创建列表。像这样:
var shopList = {
create: function createList(listName) {
this[listName] = {};
this[listName]["Banana"] = 2
},
output: function output(listName) {
return this[listName];
}
};
shopList.create('list');
console.log(shopList.output('list'));
但是,正如@armchairdj 在评论中指出的那样,最好创建一个容器,专门 属性 来保存列表:
var shopList = {
lists: {},
create: function createList(listName) {
this.lists[listName] = {};
this.lists[listName]["Banana"] = 2
},
output: function output(listName) {
return this.lists[listName];
}
};
如果您想避免通过天真地添加用户提供的任意键来破坏 showList 对象的方法,您应该为您的列表创建一个内部名称空间。
var shopList = {
lists: {},
create: function (listName) {
this.lists[listName] = this.lists[listName] || {};
this.lists[listName].Banana = 2;
},
output: function (listName) {
var list = this.lists[listName];
if (!list) {
return console.log('No list named ' + listName + ' found.');
}
console.log(list)
}
};
shopList.create('output');
shopList.output('output');
shopList.create('foo');
shopList.output('foo');
shopList.output('bar');