需要Javascript新运算符帮助-使用JavaScript中的new运算符的动态对象

时间:2018-10-29 23:04:51

标签: javascript

所以我一直想让一个想法起作用,但是我似乎无法弄清楚。我想做以下事情。

// my old fasion code but not very flexibale 
function runCode() {
  var x = new myObject();
  return x.run();
}

我真正想做的事.....

// pass in string paramater of object to create
// objName is the name of an object string to new like "myObject"
function runCode(objNameToUse) {
  var x = new Object(objNameToUse);
  return x.run();
}
runCode("myObject");

我该如何使用javascript做类似的事情?

2 个答案:

答案 0 :(得分:0)

您可以将可用构造函数的名称映射到构造函数本身,就像使用对象一样:

var someConstructors = Object.create(null);
someConstructors.myObject = myObject;
…

function runCode(objNameToUse) {
  var constructor = someConstructors[objNameToUse];
  var x = new constructor();
  return x.run();
}

runCode("myObject");

Object.create(null)是一个不继承Object.prototype属性的对象,因此您没有像hasOwnProperty这样的多余“键”。重要,因为通常的原因是您要基于控件外部的字符串创建对象(例如,用户输入);在许多其他情况下,您可以将myObject作为函数而不是名称直接传递给runCode

因此,请确保这不是您真正想要的“灵活性”:

function runCode(constructor) {
  var x = new constructor();
  x.run();
}

runCode(myObject);

答案 1 :(得分:-3)

如果您绝对确定,您可以随时100%控制将哪个类名传递给函数,则可以使用eval

class myObject {
  run() {
    console.log('run');
  }
}

function runCode(objNameToUse) {
  var x = new (eval(objNameToUse))();
  return x.run();
}

runCode('myObject');