【问题标题】:Instantiate class object with variable class name in nodejs [duplicate]在nodejs中用变量类名实例化类对象[重复]
【发布时间】:2018-06-22 16:13:27
【问题描述】:

nodejs 中有没有办法用变量类名实例化类对象。我正在尝试下面的 sn-p,但它不起作用。

let className = "hello"; 
let object = new [className]();

已编辑 我有多个类,在这些多个类中,我将获得一个子集(字符串数组)作为来自另一个服务的输入,我必须调用这些子集类的主函数。

// Multiple classes = ["first", "second", ..............., "twenty"]; 

let subset_class_names = ["first", "three", "five"]; 

for (let aClass of subset_class_names) { 
    let object = new [aClass](); 
    object.main(); 
}

【问题讨论】:

  • 为什么?我不知道这个的任何用例
  • 我有多个类,在这些多个类中,我将得到一个子集作为输入,我必须调用这些子集类的主函数。 // Multiple classes = ["first", "second", ..............., "twenty"];let subset_class_names = ["first", "three", "five"]; for (let class of subset_class_names) { let object = new [class](); object.main(); }

标签: javascript node.js class oop


【解决方案1】:

我认为,当您知道如何使用数据结构时,大多数编程问题都会变得容易。在这种情况下,您所需要的只是类名的Map 到类本身。

class One {
  constructor(){
    console.log("One constructed");
  }
}


class Two {
  constructor(){
    console.log("Two constructed");
  }
}

class Three {
  constructor(){
    console.log("Three constructed");
  }
}


const classes = new Map()
classes.set("one", One);
classes.set("two", Two);
classes.set("three", Three);

let subset_class_names = ["one", "two"]; 

for (let aClass of subset_class_names) {
  const theClass = classes.get(aClass);
  if (theClass) new theClass();
}

【讨论】:

    【解决方案2】:

    为什么不迭代类名,而不是迭代类本身?

    class One {
      constructor(){
        console.log("One constructed");
      }
    }
    
    
    class Two {
      constructor(){
        console.log("Two constructed");
      }
    }
    
    const classes = [One, Two];
    
    for(const aClass of classes)
      new aClass();

    【讨论】:

    • 我将从另一个服务获取类名作为输入,然后迭代并实例化对象。这在我的情况下是不可能的。
    【解决方案3】:

    你可以用window试试这个

    var className = 'hello'
    var obj = new window[className];
    

    【讨论】:

    • 我收到此错误:ReferenceError: window is not defined
    • 好的,通常在客户端工作,因为您在 node.js 上使用它,所以这个窗口是浏览器的东西,在 Node 上不存在。如果您真的想创建一个全局,请改用 global:
    猜你喜欢
    • 1970-01-01
    • 2012-11-16
    • 2016-12-24
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多