Mencipta fungsi daripada rentetan dalam JavaScript boleh membantu apabila anda perlu menjana fungsi secara dinamik pada masa jalan atau anda mempunyai rentetan yang mengandungi kod untuk fungsi yang ingin anda laksanakan.
Keupayaan untuk membina fungsi daripada rentetan ialah ciri berguna JavaScript yang membolehkan fungsi dicipta secara dinamik semasa masa jalan. Fungsi eval() dan fungsi Function() baharu Object() [kod asli] ialah dua cara paling popular untuk melakukan ini, walaupun kedua-duanya mempunyai kelemahan keselamatan yang ketara.
Function.prototype.constructor ialah pilihan yang lebih selamat, walaupun ia kurang dikenali. Sebelum memilih pendekatan JavaScript untuk mencipta fungsi daripada rentetan, adalah penting untuk mempertimbangkan risiko dan kes penggunaan.
Kaedah JavaScript eval() ialah salah satu cara paling mudah untuk membina fungsi daripada rentetan. Fungsi eval() yang berkuasa ini boleh menjalankan sebarang kod JavaScript yang diberikan kepadanya sebagai rentetan.
<html> <body> <p id="result"></p> <script> let functionString = "function add(a, b) { return a + b; }"; let add = eval("(" + functionString + ")"); document.getElementById("result").innerHTML = "Sum of 1 and 2: " + add(1, 2); </script> </body> </html>
Di sini kita dapat melihat bahawa kita mempunyai fungsi yang mengambil dua parameter dan mengembalikan jumlahnya. Sekarang, fungsi ini terkandung dalam rentetan. Fungsi eval() menerima rentetan ini sebagai parameter dan menilainya sebelum mengembalikan fungsi. Fungsi yang dikembalikan kemudiannya diberikan kepada pembolehubah bernama add yang boleh digunakan seperti fungsi lain.
Walau bagaimanapun, ia menjalankan sebarang kod JavaScript yang diberikan kepadanya, jadi menggunakannya dalam kod pengeluaran boleh berisiko kerana ia boleh menyebabkan kecacatan keselamatan.
Cara lain untuk mencipta fungsi daripada rentetan dalam JavaScript ialah menggunakan pembina Function(). Pembina Function() mencipta objek fungsi baharu daripada rentetan yang mengandungi kod fungsi. Berikut ialah contoh cara mencipta fungsi daripada rentetan menggunakan pembina Function() -
<html> <body> <p id="print"></p> <script> let functionString = "function add(a, b) { return a + b; }"; let functionBody = functionString.substring( functionString.indexOf("{") + 1, functionString.lastIndexOf("}") ); let add = new Function("a", "b", functionBody); document.getElementById("print").innerHTML = "Sum of 1 and 2: " + add(1, 2); </script> </body> </html>
Dalam contoh ini, kami menghantar rentetan yang mengandungi kod fungsi kepada pembina Function(), yang mencipta objek fungsi baharu daripada rentetan. Kami kemudian menetapkan fungsi yang dikembalikan kepada tambah pembolehubah, yang boleh digunakan seperti fungsi lain.
Memandangkan ia hanya boleh mencipta fungsi, ia kurang berisiko berbanding eval(), tetapi masih mempunyai risiko yang serupa
Ini menjana fungsi dan tidak boleh menjalankan sebarang kod lain kecuali badan fungsi yang diluluskan sebagai rentetan. Walau bagaimanapun, ia kurang digunakan secara meluas dan tidak disokong oleh pelayar lama seperti dua kaedah lain.
<html> <body> <p id="result"></p> <script> let add = Function.prototype.constructor('a', 'b', 'return a+b')(1, 2); document.getElementById("result").innerHTML = "Sum: " + add; </script> </body> </html>
Dalam contoh ini, parameter fungsi dan badan fungsi disediakan kepada pembina. Kami menggunakan Function.prototype.constructor untuk mencipta fungsi baharu dengan parameter yang diberikan dan badan fungsi yang diberikan, dan kemudian segera memanggil fungsi dengan memanggil fungsi dengan parameter yang diberikan
Ingat bahawa fungsi yang anda bina daripada rentetan akan mempunyai akses kepada skop global dan tidak akan disertakan dalam skop kod yang anda gunakan untuk menciptanya.
Satu lagi perkara penting yang perlu diingat ialah mencipta fungsi daripada rentetan boleh melambatkan aplikasi anda, terutamanya jika badan fungsi panjang.
Selain itu, jika fungsi itu kompleks, membina fungsi daripada rentetan menjadikannya lebih sukar untuk memahami dan menyahpepijat kod.
Disebabkan isu keselamatan, biasanya tidak disyorkan untuk menggunakan kaedah eval() dan Function() baharu dalam kod pengeluaran. Sebaliknya, anda harus mempertimbangkan pilihan lain, seperti fungsi prapengumpulan atau menggunakan prapemproses JavaScript seperti Babel untuk mengubah kod anda kepada versi yang setara dan lebih selamat.
Atas ialah kandungan terperinci Bagaimana untuk mencipta fungsi daripada rentetan dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!