动态调用构造函数

时间:2017-09-11 07:20:31

标签: javascript arrays object

我希望根据对象中的值动态调用构造函数。

我们说我有一个对象:

var food = {

  pizzas:[
    {
      pizza: 'Pepperoni'
    },
    {
      pizza: 'Vegetarian'
    }
  ]

}

现在,让我们说我有一些绑定到全局对象的构造函数。

window.pizzaConstructors.Pepperoni = function(){
  // do something
}

window.pizzaConstructors.Vegetarian = function(){
  // do something else
}

我希望能够做的是循环遍历food.pizzas数组,并根据当前索引的pizza类型调用相应的构造函数。

所以,如果我有:

(for pizza in food.pizzas){
  var currentPizza = food.pizzas[pizza]

  new pizzaConstructors.currentPizza(); 
}

知道我怎么能这样做吗?

1 个答案:

答案 0 :(得分:0)

使用[]语法访问构造函数。

(for pizza in food.pizzas){
  var currentPizza = food.pizzas[pizza]

  new pizzaConstructors[currentPizza](); 
}

new pizzaConstructors.currentPizza()表示调用指定的currentPizza函数。

new pizzaConstructors[currentPizza.pizza]()表示评估currentPizza,获取它的值,使用已评估的currentPizza的名称调用该函数。

var food = {
  pizzas:[
    {
      pizza: 'Pepperoni'
    },
    {
      pizza: 'Vegetarian'
    }
  ]
};

const pizzaConstructors = {};

pizzaConstructors.Pepperoni = function(){};
pizzaConstructors.Vegetarian = function(){};

const arrOfObjects = [];

for (pizza in food.pizzas) {
  const currentPizza = food.pizzas[pizza].pizza;

  arrOfObjects.push(new pizzaConstructors[currentPizza]()); 
}

console.log(arrOfObjects);