Tipo de objeto determinado en tiempo de ejecución - Javascript (ExtJS)
-
06-07-2019 - |
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
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 + "()");