Dalam sesetengah senario, mengakses nama parameter dan nilai fungsi secara dinamik menjadi perlu. Artikel ini meneroka penyelesaian yang mantap untuk masalah ini.
Fungsi berikut, getParamNames, boleh mengekstrak nama parameter mana-mana fungsi yang disediakan:
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; var ARGUMENT_NAMES = /([^\s,]+)/g; function getParamNames(func) { var fnStr = func.toString().replace(STRIP_COMMENTS, ''); var result = fnStr.slice(fnStr.indexOf('(')+1, fnStr.indexOf(')')).match(ARGUMENT_NAMES); if(result === null) result = []; return result; }
getParamNames(getParamNames) // returns ['func'] getParamNames(function (a,b,c,d){}) // returns ['a','b','c','d'] getParamNames(function (a,/*b,c,*/d){}) // returns ['a','d'] getParamNames(function (){}) // returns []
Dengan kemunculan ES6, parameter lalai boleh menghalang fungsi getParamNames. Untuk menangani perkara ini, versi yang dikemas kini disediakan:
var STRIP_COMMENTS = /(\/\/.*$)|(\/\*[\s\S]*?\*\/)|(\s*=[^,\)]*(('(?:\'|[^'\r\n])*')|("(?:\"|[^"\r\n])*"))|(\s*=[^,\)]*))/mg;
Walaupun versi yang dipertingkat ini mengendalikan parameter lalai dalam kebanyakan kes, pengecualian mungkin berlaku.
Dalam selain mendapatkan nama parameter, seseorang juga mungkin memerlukan nilai yang sepadan. Ini mudah diakses melalui pembolehubah tempatan argumen, yang boleh ditukar kepada tatasusunan:
var args = Array.prototype.slice.call(arguments);
Sebagai alternatif, jika tatasusunan generik tersedia:
var args = Array.slice(arguments);
Dengan menggunakan teknik ini, pembangun boleh mengakses parameter dan nilai fungsi secara dinamik untuk pelbagai keperluan dan penyesuaian.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan Secara Dinamik Nama dan Nilai Parameter Fungsi JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!