2011-01-04 17 views
9

En Javascript, ¿cómo crea una nueva clase dinámicamente sin usar eval() y pasa un argumento? Por ejemplo, digamos que quiero crear un nuevo CatViewController y pasar "gatito", ¿cómo lo haría?crear instancia de clase dinámica

var myClassname = "CatViewController"; 
var cat = new myClassname("kitten"); 

Se debe resolver a:

var cat = new CatViewController("kitten"); 

Gracias!

+1

Deberá mostrar cómo y dónde se define la función del constructor para que @Chaos dé una respuesta más precisa. Sus ejemplos genéricos muestran en general cómo funcionaría. – user113716

Respuesta

8

Mientras la función está dentro de alcance que puede hacer esto:

var cat = new this[myClassname]("kitten"); 

Otra forma similar:

var classes = { 
    A: function (arg) { 

    }, 
    B: function (arg) { 

    }, 
    C: function (arg) { 

    } 
}; 

var a = new classes["A"]("arg"); 
+1

Eso solo funcionará si 'this == window', y la var está en el alcance global. –

+0

@Matthew - Eso no es del todo correcto. En realidad, puede funcionar dentro de cualquier ámbito, pero debe definirse dentro de dicho alcance. – ChaosPandion

+0

¿Qué sucede si lo instancias dentro de otra clase donde this! = Window? – jaysonp

0

@Matthew - Si tiene referencia al alcance window que debe ser bueno para ir, ¿verdad? Simplemente use la referencia window en lugar de la palabra clave this. Parece estar trabajando para mí. Sin embargo, tengo mucha curiosidad si hay algún inconveniente en este enfoque, ya que actualmente lo estoy usando en un proyecto. Here is a demo según su demo anterior.

Cuestiones relacionadas