javascript获取函数名称、函数参数、对象属性名称的代码实例


Posted in Javascript onApril 12, 2014

一、获取函数名称的3种实现方法

实例1:

在js权威指南中看到的一个方法:

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());

以上的方法还有一个情况没法解决,希望有办法的能给出指点。

var x =   
{  
    run : function()  
    {  
        return getFuncName(arguments.callee);  
    }  
}  
window.alert(x.run()); 

这个情况下无法得到函数的名称;

二、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>

Javascript 相关文章推荐
JavaScript 比较时间大小的代码
Apr 24 Javascript
javascript中的void运算符语法及使用介绍
Mar 10 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
Apr 01 Javascript
Android中的jQuery:AQuery简介
May 06 Javascript
JavaScript获取网页表单action属性的方法
Apr 02 Javascript
浅谈vue的踩坑路
Aug 31 Javascript
html中通过JS获取JSON数据并加载的方法
Nov 30 Javascript
详解vue组件开发脚手架
Jun 15 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
Aug 19 Javascript
Promise扫盲贴
Jun 24 Javascript
小程序接口的promise化的实现方法
Dec 11 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
Apr 08 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
Apr 12 #Javascript
JS获取URL中参数值(QueryString)的4种方法分享
Apr 12 #Javascript
javascript对JSON数据排序的3个例子
Apr 12 #Javascript
Js保留小数点的4种效果实现代码分享
Apr 12 #Javascript
JS判断客户端是手机还是PC的2个代码
Apr 12 #Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
Apr 12 #Javascript
jQuery中阻止冒泡事件的方法介绍
Apr 12 #Javascript
You might like
为了这两部电子管收音机,买了6套全新电子管和10粒刻度盘灯泡
2021/03/02 无线电
通俗易懂的php防注入代码
2010/04/07 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
2013/04/26 PHP
php小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
php操作mysqli(示例代码)
2013/10/28 PHP
php使用session二维数组实例
2014/11/06 PHP
php中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
JQuery 无废话系列教程(二) jquery实战篇上
2009/06/23 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
2013/03/05 Javascript
javascript得到当前页的来路即前一页地址的方法
2014/02/18 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
requireJS使用指南
2016/04/27 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
python 实现倒排索引的方法
2018/12/25 Python
python中的单引号双引号区别知识点总结
2019/06/23 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
MCAKE蛋糕官方网站:一直都是巴黎的味道
2018/02/06 全球购物
学生党员思想汇报
2013/12/28 职场文书
理工类毕业自我鉴定
2014/02/20 职场文书
社会调查研究计划书
2014/05/01 职场文书
检讨书范文300字
2015/01/28 职场文书
vue使用v-model进行跨组件绑定的基本实现方法
2021/04/28 Vue.js
Python Parser的用法
2021/05/12 Python
SQL IDENTITY_INSERT作用案例详解
2021/08/23 MySQL
Python作用域和名称空间的详细介绍
2022/04/13 Python