Re: [問題] 在Function中取得Function Name

看板Ajax作者 (鼎玉鉉)時間14年前 (2011/02/10 22:05), 編輯推噓12(12012)
留言24則, 5人參與, 最新討論串3/4 (看更多)
※ 引述《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)

02/10 23:15, , 1F
酷耶沒想過有這招
02/10 23:15, 1F

02/10 23:22, , 2F
不過是不是只要if (arguments.callee === this[name])
02/10 23:22, 2F

02/10 23:23, , 3F
這樣就可以了,比較快
02/10 23:23, 3F

02/10 23:26, , 4F
這樣不一定會比較快吧...
02/10 23:26, 4F

02/10 23:31, , 5F
不過話又說回來 typeof 取得的東西其實有點陷阱...
02/10 23:31, 5F

02/10 23:44, , 6F
判斷一個項目不會比判斷三個項目快嗎?
02/10 23:44, 6F

02/10 23:52, , 7F
這是個好問題 要看實際情況來說 假如這個物件裡塞了一堆不
02/10 23:52, 7F

02/10 23:53, , 8F
是function 的屬性 那麼先判斷他的typeof理論上會比較快
02/10 23:53, 8F

02/11 00:42, , 9F
感謝 多學了幾個新東西
02/11 00:42, 9F

02/11 00:55, , 10F
我比較好奇為什麼會有這樣需求@@
02/11 00:55, 10F

02/11 01:02, , 11F
比如debug,或是自己刻一個mvc從controller自動抓
02/11 01:02, 11F

02/11 01:02, , 12F
action name去對應到view...
02/11 01:02, 12F

02/11 01:22, , 13F
這些需求都直接寫成字串就可以了吧
02/11 01:22, 13F

02/11 02:25, , 14F
是阿,可是每一次都render('blahblah..')很煩人,或是每
02/11 02:25, 14F

02/11 02:26, , 15F
次debug('methodName,.....');如果能自動抓比較方便摟
02/11 02:26, 15F

02/11 07:27, , 16F
要debug幫匿名函數命名不就得了= =
02/11 07:27, 16F

02/11 08:10, , 17F
我覺得真的要debug的話還不儒學著用breakpoint跟stacktrace
02/11 08:10, 17F

02/12 00:02, , 18F
其實只是突然好奇能不能這麼做而已 若可以程式彈性會變大
02/12 00:02, 18F

02/12 00:15, , 19F
不過這樣跑迴圈走返自身屬性的成本有點大..所以放棄 orz
02/12 00:15, 19F

02/12 00:18, , 20F
主要的需求簡單的說明是 有一個物件可以動態添加方法
02/12 00:18, 20F

02/12 00:18, , 21F
有一個物件可以動態添加對應名稱的新物件 屬性不一定
02/12 00:18, 21F

02/12 00:19, , 22F
因為名字會有對應 所以假如可以取得自身的屬性名稱可以
02/12 00:19, 22F

02/12 00:19, , 23F
比較好抓資料 這樣外部呼叫的時候僅需要呼叫方法就好
02/12 00:19, 23F

02/12 00:20, , 24F
不過現在是先把name當成參數來處理掉
02/12 00:20, 24F
文章代碼(AID): #1DK_35Z- (Ajax)
文章代碼(AID): #1DK_35Z- (Ajax)