看板 Ajax 關於我們 聯絡資訊
※ 引述《IwillSay (我將會)》之銘言: : 請問假如我有一個object長這樣 : var fns = { : MethodA : function() { : //alert(???); 在這邊取得MethodA的字串 : } : }; : 請問有辦法在MethodA裡面取得他對應的Property Name嗎(MethodA) var fns = { a1 : 123, a2 : 456, a3 :"xxx", Method1 : function() { alert(this.a1); }, MethodA : function (){ var name; for (name in this) { if (this.hasOwnProperty(name) && typeof this[name] === 'function' && arguments.callee === this[name]) { break; } } alert(name); }, Method2 : function() { alert(this.a2); } }; fns.Method1(); fns.Method2(); fns.MethodA(); http://www.jsfiddle.net/5E4eq/8/ 先用for 循環this 由於for in 會讀取所有prototype chain 上的 property 所以用hasOwnProperty過濾 並用typeof 只讀取function 最後再比對是不是同一個function object -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.59.14.51 ※ 編輯: sk1765 來自: 61.59.14.51 (02/10 22:24)
dreamerslab:酷耶沒想過有這招 02/10 23:15
dreamerslab:不過是不是只要if (arguments.callee === this[name]) 02/10 23:22
dreamerslab:這樣就可以了,比較快 02/10 23:23
s25g5d4:這樣不一定會比較快吧... 02/10 23:26
s25g5d4:不過話又說回來 typeof 取得的東西其實有點陷阱... 02/10 23:31
dreamerslab:判斷一個項目不會比判斷三個項目快嗎? 02/10 23:44
s25g5d4:這是個好問題 要看實際情況來說 假如這個物件裡塞了一堆不 02/10 23:52
s25g5d4:是function 的屬性 那麼先判斷他的typeof理論上會比較快 02/10 23:53
IwillSay:感謝 多學了幾個新東西 02/11 00:42
othree:我比較好奇為什麼會有這樣需求@@ 02/11 00:55
dreamerslab:比如debug,或是自己刻一個mvc從controller自動抓 02/11 01:02
dreamerslab:action name去對應到view... 02/11 01:02
othree:這些需求都直接寫成字串就可以了吧 02/11 01:22
dreamerslab:是阿,可是每一次都render('blahblah..')很煩人,或是每 02/11 02:25
dreamerslab:次debug('methodName,.....');如果能自動抓比較方便摟 02/11 02:26
s25g5d4:要debug幫匿名函數命名不就得了= = 02/11 07:27
TonyQ:我覺得真的要debug的話還不儒學著用breakpoint跟stacktrace 02/11 08:10
IwillSay:其實只是突然好奇能不能這麼做而已 若可以程式彈性會變大 02/12 00:02
IwillSay:不過這樣跑迴圈走返自身屬性的成本有點大..所以放棄 orz 02/12 00:15
IwillSay:主要的需求簡單的說明是 有一個物件可以動態添加方法 02/12 00:18
IwillSay:有一個物件可以動態添加對應名稱的新物件 屬性不一定 02/12 00:18
IwillSay:因為名字會有對應 所以假如可以取得自身的屬性名稱可以 02/12 00:19
IwillSay:比較好抓資料 這樣外部呼叫的時候僅需要呼叫方法就好 02/12 00:19
IwillSay:不過現在是先把name當成參數來處理掉 02/12 00:20