【问题标题】:Dynamically creating a number of class objects动态创建多个类对象
【发布时间】:2019-10-06 02:38:48
【问题描述】:

我有这个类对象,我需要为每个存在的用户创建一个新的 Person() 类对象。 假设我有用户(user1、user2、user3),我需要创建 3 个 Person() 对象。我怎样才能动态地做到这一点?

function Person() {
  this.user = 'user_1';
}
Person.prototype.setName = function(user) {
  this.user = user;
};
Usernames = ["user1", "user2", "user3"]
var Example = new Person();
Example.setName(Username[0]);

var Example2 = new Person();
Example.setName(Username[1]);

var Example3 = new Person();
Example3.setName(Username[2]);

【问题讨论】:

    标签: node.js class


    【解决方案1】:

    你可以这样做

    var Example=[];
    
    for(let i=0;i<Usernames.length;i++){
        Example[i] = new Person();
        Example[i].setName(Username[i]);
    }
    

    【讨论】:

      【解决方案2】:

      对 Sudhakar RS 的回答更简单的方法:

      Usernames = ["user1", "user2", "user3"];
      let persons = Usernames.map(name => {
          let person = new Person();
          person.setName(name);
          return person;
      });
      

      这种方法允许进一步抽象和更实用的方法,同时保持不变性/稳定性。例如:

      let Usernames = ["user1", "user2", "user3"];
      let persons = Usernames.map(createPersonWithName);
      
      function createPersonWithName(name) {
        let person = new Person();
        person.setName(name)
        return person;
      }
      

      能够以这种方式隔离事物在其他方面可能非常有价值,无论您是在做对象数组还是密切相关的数组。老实说,对象数组是最好和最简单的。

      Users = [{
        name: 'user1',
        data: 'value1'
      }, {
        name: 'user2',
        data: 'value2'
      }, {
        name: 'user3',
        data: 'value3'
      }];
      
      let persons = Users.map(createPerson);
      
      function createPerson(user) {
        let person = new Person();
        person.setName(user.name);
        person.setData(user.data);
        return person;
      }
      

      虽然使用多个数组通常需要超出范围或花哨的其他技巧,但许多人认为这些技巧很臭。一个简单的方法:

      let Usernames = ["user1", "user2", "user3"];
      let Userdata = ["value1", "value2", "value3"];
      let persons = Usernames.map(createPersonWithName);
      
      function createPersonWithName(name, index) {
        let person = new Person();
        person.setName(name)
        person.setData(Userdata[index]);
        return person;
      }
      

      【讨论】:

      • 我不太清楚你的意思。你的意思是用户名中的另一个数组吗?还是您的意思是 createPerson 函数引用的另一个相同大小的值数组?还是别的什么?
      • 另一个同样大小的值数组。我只是从另一个数组中设置另一个变量,该变量的大小与分配给用户名的同一个人对象下的用户名相同。
      • 有两种选择。由于它与此答案密切相关,因此我当然可以将其视为原始答案的扩展。
      • 如果你能这么好。
      • 这里还有两个示例供您参考。老实说,第一个更好,尽可能
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 2018-05-25
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多