Sebagai contoh;
var s = "function test(){
alert(1);
}";
var fnc = aMethod(s);
Jika ini adalah stringnya, saya ingin fungsi yang disebut fnc. Dan fnc();
muncul layar peringatan.
eval("alert(1);")
tidak menyelesaikan masalah saya.
javascript
string
function
ymutlu
sumber
sumber
Cara yang lebih baik untuk membuat fungsi dari string adalah dengan menggunakan
Function
:Ini memiliki keuntungan / kerugian bahwa variabel dalam cakupan saat ini (jika tidak global) tidak berlaku untuk fungsi yang baru dibangun.
Meneruskan argumen juga dimungkinkan:
sumber
Function
Anda tidak mencemari cakupan lokal dan inilah mengapaeval
membuat pengoptimalan menjadi sangat sulit untuk mesin ... Dengan contoh OP, saya akan:var fnc = Function('return '+s)();
element.onclick = function() { alert("test"); }
.Anda cukup dekat.
Ini biola yang berfungsi .
sumber
eval
Peringatan wajib bagi pencari di masa mendatang:eval
dapat membuka celah bagi peretas: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… tetapi jika Anda mengetahui bahayanya dan dapat menghindarinya, ini adalah cara sederhana yang bagus untuk membuat fungsi dari stringYa, menggunakan
Function
adalah solusi yang bagus tetapi kita bisa melangkah lebih jauh dan menyiapkan parser universal yang mengurai string dan mengubahnya menjadi fungsi JavaScript nyata ...contoh penggunaan:
di sini adalah jsfiddle
sumber
Nama fungsi dinamis dalam
JavaScript
Menggunakan
Function
Sumber: http://marcosc.com/2012/03/dynamic-function-names-in-javascript/
Menggunakan
eval
Menggunakan
sjsClass
https://github.com/reduardo7/sjsClass
Contoh
sumber
Teknik ini mungkin pada akhirnya setara dengan metode eval, tetapi saya ingin menambahkannya, karena mungkin berguna bagi sebagian orang.
Ini secara fungsional seperti menambahkan elemen <script> ini ke akhir dokumen Anda, misalnya:
sumber
Gunakan
new Function()
dengan kembali ke dalam dan jalankan segera.sumber
Contoh dengan argumen dinamis:
sumber