JS 利用 eval 動態(tài)獲取 函數(shù)內(nèi)部參數(shù)名(偽反射)

通過獲得函數(shù)代碼 => 字符串 + 正則解析 的方式 箕慧, 配合eval

function getParamName() {}

function fn() {
  var param1 = 0
  var a = 2

  console.log(getParamName(param1))
  console.log(getParamName(a))
}

function callWithVariableName(fn) {
  eval('(' + fn.toString().replace(/\bgetParamName\s*\(([a-zA-Z_$][\w_$]*)\)/g, function(u, v) {
    return "'" + v + "'"
  }) + '())')
}

callWithVariableName(fn)

解釋一下:
callWithVaraiableName 的意思是先去讀取包含A函數(shù)中包含 ----getParamName+"(" + 參數(shù)名 + ")"---- 這樣的字符串剩失, 然后調(diào)用replace函數(shù)中多次匹配句狼。
每次匹配后蒂教, 通過回調(diào)函數(shù)中原型鏈中的第二個參數(shù)(也就是v) 獲得字符串的參數(shù)名清笨,return出去圆恤。
再通過(function())的方式讓函數(shù)自己執(zhí)行一遍音比, 最后把整段代碼塞回console.log中, 通過console.log打印出來

經(jīng)過正則匹配替換后的函數(shù)會變成這樣的statement

function fn() {
?  var param1 = 0
?  var a = 2
?
?  console.log('param1')
?  console.log('a')

這樣通過eval(statement()) 執(zhí)行一遍就可以打印出來了隧哮, 但這種實現(xiàn)方式的前提是你得先去寫 console.log(getParamName(param1))
console.log(getParamName(a)) 這些在函數(shù)中

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末桶良,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子沮翔,更是在濱河造成了極大的恐慌陨帆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件采蚀,死亡現(xiàn)場離奇詭異疲牵,居然都是意外死亡,警方通過查閱死者的電腦和手機榆鼠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門纲爸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人妆够,你說我怎么就攤上這事识啦「何茫” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵袁滥,是天一觀的道長盖桥。 經(jīng)常有香客問我,道長题翻,這世上最難降的妖魔是什么揩徊? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮嵌赠,結(jié)果婚禮上塑荒,老公的妹妹穿的比我還像新娘。我一直安慰自己姜挺,他們只是感情好齿税,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炊豪,像睡著了一般凌箕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上词渤,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天牵舱,我揣著相機與錄音,去河邊找鬼缺虐。 笑死芜壁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的高氮。 我是一名探鬼主播慧妄,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼剪芍!你這毒婦竟也來了塞淹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤罪裹,失蹤者是張志新(化名)和其女友劉穎窖铡,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坊谁,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年滑臊,在試婚紗的時候發(fā)現(xiàn)自己被綠了口芍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡雇卷,死狀恐怖鬓椭,靈堂內(nèi)的尸體忽然破棺而出颠猴,到底是詐尸還是另有隱情,我是刑警寧澤小染,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布翘瓮,位于F島的核電站,受9級特大地震影響裤翩,放射性物質(zhì)發(fā)生泄漏资盅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一踊赠、第九天 我趴在偏房一處隱蔽的房頂上張望呵扛。 院中可真熱鬧,春花似錦筐带、人聲如沸今穿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蓝晒。三九已至,卻和暖如春帖鸦,著一層夾襖步出監(jiān)牢的瞬間芝薇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工富蓄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留剩燥,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓立倍,卻偏偏與公主長得像灭红,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子口注,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,233評論 0 4
  • 有人說過变擒,很多彎路到最后都成了直路,所有的坑到最后也都成了坦途寝志;所謂的直路和坦途并不是擺在眼前的娇斑,都是不斷的的...
    老衲法號一眉道人閱讀 1,331評論 0 4
  • 初衷:看了很多視頻、文章材部,最后卻通通忘記了毫缆,別人的知識依舊是別人的,自己卻什么都沒獲得乐导。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,009評論 0 20
  • 快速的口錄賬號密碼苦丁,聲軌、瞳孔全部核對完畢物臂,酒醒半分不足的鱷魚眼前的世界逐漸回歸自己熟知的地方旺拉,艾城黑潮內(nèi)政廳大堂...
    Mod模君閱讀 257評論 0 1
  • 我一點一點的學(xué)習(xí)著長大产上, 我還沒學(xué)好之前確已經(jīng)長大了。 一點點的時光蛾狗, 一點點的空間晋涣, 被我用一點點船無聊占滿, ...
    女瓦閱讀 74評論 0 1