首页 > 解决方案 > 如何在 JavaScript 中动态创建类实例?

问题描述

假设我有一组已定义的类

class Dick { };
class Duck { };
class Dear { };

const arr = [Dick, Duck, Dear];

我也有一个对象

const obj = {};

我想定义一个函数,该函数将获取该对象和该数组并应用一些魔法,然后返回一个像这样的新对象。在这个例子中,这个新创建的对象具有像上面类名这样的属性(每个的第一个字母变成小写),每个属性都有一个该类实例的值。可以用 JavaScript 做吗?

obj = magicFunction(obj, arr);


console.log(obj)
/*
{
 dick: <instance of the class Dick>,
 duck: <instance of the class Duck>,
 dear: <instance of the class Dear>
 ...
}
*/

笔记:

<instance of the class ... > is NOT a string,它是一个真实的实例。

标签: javascriptclassoop

解决方案


也许这就是你要找的?

class Dick { };
class Duck { };
class Dear { };

const dict = { Dick, Duck, Dear };
function magicFunction(obj={}, classes) {
  let results = {};
  for (let key in classes) {
    results[key.toLowerCase()] = new classes[key](obj)
  }
  return results;
}

let obj = {};
obj = magicFunction(obj, dict);
console.log(obj);

使用解构将 arr 更改为字典以保留类名。

原始obj的被传递给每个类的构造函数;允许您一次用相同的值初始化它们!


推荐阅读