使用字符串作为名称创建对象

时间:2016-05-05 06:20:14

标签: javascript angularjs

我的函数将模型名称作为字符串,我需要根据其名称创建对象的新实例。

例如:

    modelName = 'MockA';
    model = new modelName();

这是不可行的。在PHP我会使用

    model = new $$modelName

提前致谢

2 个答案:

答案 0 :(得分:4)

如果import csv with open("fileName.csv") as f: reader=csv.reader(f) for row in reader: print row 在全球范围内,您可以使用:

MockA

如果没有,那么您应该重新考虑存储模型的方式,例如。以模型为对象:

var model = new window[modelName]();

并访问

var my_models = {
   MockA: function() {},
   MockB: function() {}
}

答案 1 :(得分:0)

您可以使用object factorybracket notation

代码示例:



// First example: Use a Factory
var MockA = function() {
    this.sayHello = function() {
      console.log('Hi from MockA ');
    };
  },
  MockB = function() {
    this.sayHello = function() {
      console.log('Hi from MockB ');
    }
  },
  factory = function(type) {
    var obj;
    switch (type) {
      case 'MockA':
        obj = new MockA();
        break;
      case 'MockB':
        obj = new MockB();
        break;
    }
    return obj;
  }

var objA = factory('MockA');
objA.sayHello();
var objB = factory('MockB');
objB.sayHello();

// Second example: Using bracket notation
var models = {
  BaseMockA: {
    sayHello: function() {
      console.log('Hi from BaseMockA ');
    }
  },
  BaseMockB: {
    sayHello: function() {
      console.log('Hi from BaseMockB ');
    }
  }
};
var baseObjA = Object.create(models['BaseMockA']);
baseObjA.sayHello();
var baseObjB = Object.create(models['BaseMockB']);
baseObjB.sayHello();