用JS獲取函式相關的程式碼

尛沫發表於2014-05-12

本文主要介紹了JavaScript獲取函式名稱、函式引數以及物件屬性的程式碼,其中包括了獲取函式名稱的3種實現方法,和用JS獲取函式的所有引數並且遍歷某個物件所有屬性的名稱和值的方法。

獲取函式名稱的3種實現方法:

  1. 在《JavaScript權威指南》中看到的一個方法:

    Function.prototype.getName = function(){
        return this.name || this.toString().match(/function\s*([^(]*)\(/)[1]
    }
    
  2. 如果當前函式是有名函式,則返回其名字,如果是匿名函式則返回被賦值的函式變數名,如果是閉包中匿名函式則返回anonymous,程式碼如下:

    var getFnName = function(callee){
      var _callee = callee.toString().replace(/[\s\?]*/g,""),
      comb = _callee.length >= 50 ? 50 :_callee.length;
      _callee = _callee.substring(0,comb);
      var name = _callee.match(/^function([^\(]+?)\(/);
      if(name && name[1]){
        return name[1];
      }
      var caller = callee.caller,
      _caller = caller.toString().replace(/[\s\?]*/g,"");
      var last = _caller.indexOf(_callee),
      str = _caller.substring(last-30,last);
      name = str.match(/var([^\=]+?)\=/);
      if(name && name[1]){
        return name[1];
      }
      return "anonymous"
    };
    

    使用:在要調查的函式內部執行此函式,傳入一個引數,為arguments.callee,程式碼如下:

    function  ee(){
      //+++++++++++++++++++++++++++++++++
      var fnname =getFnName(arguments.callee)
      //+++++++++++++++++++++++++++++++++
      alert(fnname)
    };
    ee();
    
  3. 程式碼如下:

    function getFuncName(_callee)
    {
     var _text = _callee.toString();
     var _scriptArr = document.scripts;
     for (var i=0; i<_scriptArr.length; i++)
     {
      var _start = _scriptArr[i].text.indexOf(_text);
      if (_start != -1)
      {
       if (/^function\s*\(.*\).*\r\n/.test(_text))
       {
        var _tempArr = _scriptArr[i].text.substr(0, _start).split('\r\n');
        return _tempArr[_tempArr.length - 1].replace(/(var)|(\s*)/g, '').replace(/=/g, '');
       }
       else
        return _text.match(/^function\s*([^\(]+).*\r\n/)[1];
      }
     }
    }
    function a()
    {
     return getFuncName(arguments.callee);
    }
    var b = function()
    {
     return getFuncName(arguments.callee);
    }
    window.alert(a());
    window.alert(b());
    

JS獲取函式的所有引數和遍歷某個物件所有的屬性名稱和值的方法:

  1. 獲取所有引數,程式碼如下:

    function test(){
    for(var i=0;i<arguments.length;i++)
     document.write(arguments[i]);
    }
    
  2. 遍歷某個物件所有的屬性名稱和值的方法,程式碼如下:

    <script language="javascript">
    var obj = new Object();
    obj.myname = "我是物件";
    obj.pro2 = "23";
    obj.pro3 = "abcdeg"; php程式設計師站
    for (items in obj){
     document.write("屬性:"+items+"的值是 ("+ obj[items] +")");
     document.write("<br>");
    }
    </script>
    

本文為Anyforweb技術分享部落格,需要了解網站建設及更多web應用相關資訊,請訪問anyforweb.com。

相關文章