2011-01-04 12 views
9

W JavaScript, jak utworzyć dynamicznie nową klasę bez użycia eval() i przekazać argument? Na przykład: Załóżmy, że chcę utworzyć nowy kontroler CatViewController i przekazać go "kociakowi", w jaki sposób mogę to zrobić?Wywołanie dynamicznej klasy

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

To powinno rozwiązać do:

var cat = new CatViewController("kitten"); 

Dzięki!

+1

Będziesz musiał pokazać, jak i gdzie zdefiniowana jest funkcja konstruktora, aby @Chaos mógł udzielić bardziej precyzyjnej odpowiedzi. Jego ogólne przykłady pokazują ogólnie, jak to by działało. – user113716

Odpowiedz

8

Dopóki funkcja jest w zakresie można to zrobić:

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

Inny podobny sposób:

var classes = { 
    A: function (arg) { 

    }, 
    B: function (arg) { 

    }, 
    C: function (arg) { 

    } 
}; 

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

To zadziała tylko wtedy, gdy 'to == okno', a var jest w zasięgu globalnym. –

+0

@Matthew - To nie do końca poprawne. Może faktycznie działać w dowolnym zakresie, ale musi być zdefiniowany w ramach tego zakresu. – ChaosPandion

+0

Co, jeśli utworzysz instancję wewnątrz innej klasy, gdzie to! = Okno? – jaysonp

0

@Matthew - Jeśli masz odniesienie do zakresu window ty powinien być dobry iść, prawda? Po prostu użyj odwołania window zamiast słowa kluczowego this. Wydaje się, że pracujesz dla mnie. Jestem jednak bardzo ciekawy, czy istnieją jakiekolwiek ograniczenia tego podejścia, ponieważ obecnie używam go w projekcie. Here is a demo na podstawie poprzedniego demo.

Powiązane problemy