2011-01-04 22 views
9

Javascript'te, yeni bir sınıfı nasıl eval() kullanmadan ve bir argümanı iletmeden dinamik olarak nasıl başlatırsınız? Örneğin, diyelim ki yeni bir CatViewController oluşturmak ve "kitten" girmek istiyorum, bunu nasıl yaparım?anında dinamik sınıf

var cat = new CatViewController("kitten"); 

Teşekkür:

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

O kadar çözmelidir!

+1

@Chaos'un daha kesin bir yanıt vermesi için yapıcı işlevinin nasıl ve nerede tanımlandığını göstermeniz gerekir. Onun genel örnekleri genellikle nasıl işe yarayacağını gösterir. – user113716

cevap

8

sürece işlev kapsamında olduğu gibi bunu yapabilirsiniz:

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

başka benzer bir yol:

var classes = { 
    A: function (arg) { 

    }, 
    B: function (arg) { 

    }, 
    C: function (arg) { 

    } 
}; 

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

Bu yalnızca "this == window", var ise ise global kapsamda çalışır. –

+0

@Matthew - Bu doğru değil. Aslında herhangi bir kapsamda çalışabilir, ancak söz konusu kapsamda tanımlanması gerekir. – ChaosPandion

+0

Ya bunu başka bir sınıfın içinde oluşturursanız ne olur? = Window? – jaysonp

0

@Matthew - Eğer window kapsam başvurusunu varsa iyi olmalı gitmek için değil mi? Sadece this anahtar kelimesi yerine window başvurusunu kullanın. Benim için çalışıyor gibi görünüyor. Ancak, şu anda bir projede kullandığım için bu yaklaşımda herhangi bir düşüş varsa çok merak ediyorum. Önceki demounuza göre Here is a demo.