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!