Bagaimana untuk mencipta fungsi daripada rentetan dalam JavaScript?

王林
Lepaskan: 2023-08-28 12:49:10
ke hadapan
1321 orang telah melayarinya

如何在 JavaScript 中从字符串创建函数?

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 1: Gunakan fungsi eval()

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.

Contoh

<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>
Salin selepas log masuk

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.

Kaedah 2: Gunakan pembina Function() baharu

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() -

Contoh

<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>
Salin selepas log masuk

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

Kaedah 3: Gunakan Function.prototype.constructor

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.

Contoh

<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>
Salin selepas log masuk

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!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!