Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Menggunakan Fungsi JavaScript dengan Selamat daripada Rentetan Tanpa Menggunakan `eval()`?

Bagaimana untuk Menggunakan Fungsi JavaScript dengan Selamat daripada Rentetan Tanpa Menggunakan `eval()`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-29 07:37:30476semak imbas

How to Safely Invoke a JavaScript Function from a String Without Using `eval()`?

Memanggil Panggilan Fungsi Javascript daripada Rentetan

Soalan ini menangani cabaran untuk menukar rentetan yang mewakili panggilan fungsi, seperti "tetapan .functionName '(' t.parentNode.id ')'", menjadi seruan fungsi sebenar. Matlamatnya adalah untuk melaksanakan fungsi seolah-olah rentetan telah dimasukkan terus sebagai panggilan fungsi, tanpa menggunakan eval() yang tidak digalakkan kerana kebimbangan keselamatan.

Penyelesaian:

Penyelesaian yang disediakan mencadangkan pendekatan alternatif dengan memanfaatkan objek tetingkap untuk mendapatkan rujukan kepada fungsi tersebut. Berikut ialah penjelasan yang dikemas kini dan lebih terperinci:

<code class="javascript">// Store the function name extracted from the string as a variable
var functionName = settings.functionName;

// Check if the function exists in the global scope using window
if (typeof window[functionName] === 'function') {
  // If the function exists, invoke it with the specified argument
  window[functionName](t.parentNode.id);
}</code>

Contoh:

Pertimbangkan objek tetapan berikut:

<code class="javascript">window.settings = {
  functionName: 'clickedOnItem',
};</code>

Dan fungsi berikut definisi:

<code class="javascript">function clickedOnItem(nodeId) {
  // Function body
}</code>

Menggunakan penyelesaian di atas, kita boleh menggunakan fungsi clickedOnItem dengan hujah t.parentNode.id seperti berikut:

<code class="javascript">// Extract the function name from the settings object
var functionName = settings.functionName;

// Check if the function exists in the global scope
if (typeof window[functionName] === 'function') {
  // Invoke the function with the specified argument
  window[functionName](t.parentNode.id);
}</code>

Kaedah ini membolehkan kita menggunakan fungsi secara dinamik berdasarkan perwakilan rentetan tanpa menggunakan eval() atau menjejaskan keselamatan.

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Fungsi JavaScript dengan Selamat daripada Rentetan Tanpa Menggunakan `eval()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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