Pregunta

Esto puede no ser posible (¡o podría ser muy fácil! :)) así que aquí está ...

Deseo poder crear objetos de un tipo que dependa de un conjunto de variables, sin la necesidad de una gran instrucción de cambio.

Creo que es posible en PHP hacer algo como ...

$objectType = "myNewClass";
$newObject = new $objectType();

donde la variable $ newObject contendrá una instancia de la Clase " myNewClass " ;.

¿Es esto (o alguna técnica similar) posible con Javascript?

Gracias Stuart

¿Fue útil?

Solución

Si sus funciones de constructor están definidas en el ámbito global, puede acceder a través de la notación de corchetes (ventana [fnName]):

function ObjectType1(){  // example constructor function
  this.type = 1;
}


var objectType = 'ObjectType1'; // string containing the constructor function name

var obj = new window[objectType](); // creating a new instance using the string
                                    // variable to call the constructor

Ver: Operadores miembros

Otros consejos

La respuesta de CMS es buena, pero en EXT probablemente estés tratando con espacios de nombres.

Creo un mapa de objetos que contiene cualquier clase dinámica:

// within a namespace:
var ns = {
    Thinger: function(){}
};

// globals:
var Zinger = function(){} 

// map:
var classes = {
    zinger:Zinger,
    thinger:ns.Thinger    
};

var type = "thinger";

var myClass = new classes[type](props, type, etc);

Debería ser factible usando eval ():

var obj = eval("new " + objectType + "()");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top