Ajax 板


LINE

※ 引述《Crow22312 (烏鴉)》之銘言: : 有點難下標題的一個問題, 解釋起來可能會有點囉唆.. : 因為烏鴉在寫的小程式有許許多多的函式, 有些會跟另一支共用到, : 但會需要有小部分修改. 在於量上面有一點點的規模, 所以希望函式們 : 能比較獨立的運作. : 在每個函式傳入的參數上, 烏鴉習慣會讓他們檢查是否該有的都有, : 已經讓他是在別人底下, 動態產生出來的函式了, : 為什麼會抓不到上面一層的區域變數(參數)呢 0.0? : 或者說是烏鴉想的太複雜了, : 要做到檢查參數並丟log的類似功能有別的現成解決方法 ._.? 抱歉你原文的function scope 實在是太複雜, 外加你的 new Function (str,strFnBody) 我很少用有點暈頭轉向。 我是認為你的問題目前看起來應該是主要問題在於你的資料傳不進去, 而且我覺得這個函式每次都要再定義一次感覺就很浪費, 所以我直接放棄DEBUG 你原本的解法,請原諒我的懶惰。XD (啊啊啊 不要急著 ← 我還沒講完啊啊啊 給我個機會~~~) 我先重新定義問題,現在有一個 function , 假設 param是 a,b,c 你希望檢查這個fn 有定義的 param 應該要非 undefined. (在這裡我加上一條隱性規則,沒有定義任何 optional param 。) (有定義的狀況就要自己key param name來規範了。) 就我的感覺是覺得應該可以透過 argumenets 來解決。 我的解法會是這樣 function checkFnParam(args){ var fnStr=args.callee.toString(); //取得function 定義字串 var fnNameCheck=fnStr.match(/^function\s([^\(]+)\(.+/); //解析function name fnName=(fnNameCheck==null) ? "anonymous" :fnNameCheck[1]; //如果functin name 是空白,就視為 anonymous function var params=fnStr.substring( fnStr.indexOf("(")+1, fnStr.indexOf(")")).split(/[ ,]+/); //取得定義字串中的param for(var i=0;i<params.length;++i){ if(typeof(args[i])=="undefined"){ //檢查輸入的參數是否為undefined alert(fnName + ': typeof(' + params[i]+") == undefined"); return false; } } return true; } //測試用函式1 function k( a,b,c){ checkFnParam(arguments); } k(); //k: typeof(a) == undefined k("t1"); //k: typeof(b) == undefined k("t1","t2"); //k: typeof(c) == undefined k("t1","t2","t3"); // k("t1","t2","t3","t4"); // //測試用函式2 function anotherFunction(k1,k2){ checkFnParam(arguments); } anotherFunction(); //anotherFunction: typeof(k1) == undefined anotherFunction("a"); //anotherFunction: typeof(k2) == undefined anotherFunction("a","b"); //測試用函式3 (匿名函式) var k2=function(a1,b1,c1){ checkFnParam(arguments); } k2(); //anonymous: typeof(a1) == undefined 測試用頁面。(firefox + ie6 測試無誤) http://tonylovejava.googlepages.com/testCheckFnParam.html -- 難得看到讓我有興趣去細想跟寫demo的問題 XD --  ▄▅▆▇███▇▆▅▄▃        ╰┼╯─╮ ╮         ◥███████████◣       ╰┼╯=│=│         ◥██████───────    *. ╯  ╯ ╯ の 物 語 .*  ◥███████──────◣ ~ ◢◣             ◢◣  ◥██████───────◤   ◥◤  空白的世界.翼 ◥◤  ◥██▁▂▃▄▅▆▇███▆▅▄▃▂▂telnet://tony1223.twbbs.org --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.218.161 ※ 編輯: TonyQ 來自: 220.133.218.161 (01/16 21:49)
1F:推 gpmm:所謂年紀越大性致會漸漸衰退?(無誤 XDD 01/16 22:21
2F:推 Crow22312:這解法真是好讚的一個方式喔 :P 01/16 22:27
3F:→ Crow22312:連每次都重新定義都省了 A_A 01/16 22:27
4F:→ TonyQ:gpmm 倒也不是,是有些問題重複太多次,重複到都懶得回了... 01/16 22:39
5F:→ TonyQ:我是覺得這個問題還蠻有趣的,坦白說以前還真的從沒想過可以 01/16 22:40
6F:→ TonyQ:這樣玩,所以我也覺得很有興致。 XD 01/16 22:40
7F:推 gpmm:我是開玩笑的,對於過度規律出現的問題一定會漸漸麻痺 01/16 23:05
8F:→ gpmm:但是看到有去的東西又忍不住熱情去手癢玩兩下 01/16 23:06
9F:→ gpmm:標準的熱血工程師啊 XDD 01/16 23:06
10F:→ TonyQ:希望我退役之後還是一樣熱血 v.v 最近寫什麼都沒啥動力... 01/17 21:53
11F:→ grence:function.length可以取得 function定義的參數個數 01/18 01:47
12F:→ grence:也許可以用這個取代掉正規式的部分 01/18 01:47
13F:→ grence:如果可以檢查 傳入參數跟 定義參數 的個數差異 01/18 01:59
14F:→ grence:就可以在 JavaScript做到 overloading 01/18 01:59
16F:→ grence:以上是有點離題的引申XD 01/18 02:00
17F:→ TonyQ:我知道有上面這個作法, 但是這樣就拿不到函式所定義的param 01/18 10:23
18F:→ TonyQ:name , 至於在 js 做 overloading ,這本來就是裡。密技. XD 01/18 10:24
19F:→ TonyQ:不過我是覺得值得多花費功夫去寫判斷式的overloading並不多 01/18 10:24
20F:→ TonyQ:像是jQuery的 $這類的函式比較有價值 ,或者是比較單純的 01/18 10:25
21F:→ TonyQ:getter/setter . 01/18 15:47
22F:→ grence:取 para name的用途好像也還好.一行能解決就不想包成func 01/18 20:10
23F:推 Kelunyang:可以好奇的問一下JS可以作向C#裡的setter&getter嗎? 01/18 20:35
24F:→ TonyQ:包成fn 還有能讓語意更清晰的效果 XD 01/18 22:57
25F:→ TonyQ:C#裡面的哪一種getter 跟setter ? 01/18 22:57
26F:→ TonyQ:不過我是覺得這是題目定義的問題,我一開始直覺也是想到你 01/18 22:59
27F:→ TonyQ:說得這種,不過要拿param name有時候有他的考量就是了。 01/18 22:59
28F:→ TonyQ:另外你沒有去取callee,你也拿不到function nameXD 01/18 23:00
29F:推 othree:沒辦法作 getter, setter 喔,還是要 function call 的寫法 01/19 11:17







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP