使用函数参数访问 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 notationthis 对象中创建列表。像这样:

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