2016-03-21 28 views
-1

Kodumda temsil ettiğim iki işlevi nameFuncOne ve nameFuncTwo var. işte ben ne yaptığını javascript yeni operatörünü dinamik olarak oluşturun

this.mainFunction = function() { 
    this.someFunc = function() { 
    return this.name; 
    } 
}; 

this.nameFuncOne = function() { 
    this.name = "nameOne"; 
    mainFunction.call(this); 
}; 
this.nameFuncTwo = function() { 
    this.name = "nameTwo"; 
    mainFunction.call(this); 
}; 
var one = new nameFuncOne(); 
var two = new nameFuncTwo(); 
console.log(one.someFunc() + " " + two.someFunc()); 

yapıcı fonksiyonları nameFuncOne ve değişkenler one ve two içine nameFuncTwo atamaktır. Öyleyse neden böyle bir şey yapamıyorum. Soruma göre el ile değişken oluşturmak istemiyorum. Bunu yapmanın bir yolu var mı? yanlış gittiğimde lütfen beni düzeltin.

+0

Olası yinelenen (http://stackoverflow.com/questions/5117127/use-dynamic-variable-names-in-javascript) – Justinas

+0

Hayır, bu benim sorunumu çözmez – htoniv

cevap

1

evet bunu sevebilirsiniz, ancak kodunuzda sorun var. diziye string depolarsınız.

bu deneyin

,

var funcArr = ["new nameFuncOne()", "new nameFuncTwo()"]; 
var arr = []; 
for (var i=0;i<funcArr.length; i++) { 
    arr[i] = eval(funcArr[i]); 
    console.log(arr[i].someFunc()) 
} 

eval() işlevi, bir dize olarak temsil JavaScript kodu değerlendirir. LINK

başka bir yol: [JavaScript Kullanımı dinamik değişken ismi]

var funcArr = [new nameFuncOne(), new nameFuncTwo()]; 
    var arr = []; 
    for (var i=0;i<funcArr.length; i++) { 
     arr[i] = funcArr[i]; 
     console.log(arr[i].someFunc()) 
    } 
+0

ama eval – htoniv

+0

kodumuz için iyidir evet eval kötü bir fikir, kodunuzu enjeksiyon saldırıları için açar. ancak diziyi dizide saklarsınız, böylece onu yürütmelisiniz. –

+0

Cevabımı başka bir çözümle güncelliyorum. –

İlgili konular