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灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP