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 相关文章推荐
借助script进行Http跨域请求:JSONP实现原理及代码
Mar 19 Javascript
jquery使用$(element).is()来判断获取的tagName
Aug 24 Javascript
JS实现的在线调色板实例(附demo源码下载)
Mar 01 Javascript
原生JS实现网络彩票投注效果
Sep 25 Javascript
js实现显示手机号码效果
Mar 09 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
Jun 13 Javascript
详解基于angular-cli配置代理解决跨域请求问题
Jul 05 Javascript
javascript 开发之网页兼容各种浏览器
Sep 28 Javascript
JS实现关键词高亮显示正则匹配
Jun 22 Javascript
浅谈vue的第一个commit分析
Jun 08 Javascript
JS实现电脑虚拟键盘打字测试
Jun 24 Javascript
JS前端轻量fabric.js系列之画布初始化
Aug 05 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
mysql时区问题
2008/03/26 PHP
PHP中iconv函数知识汇总
2015/07/02 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
php中final关键字用法分析
2016/12/07 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
PHP正则表达式笔记与实例详解
2019/05/09 PHP
利用js对象弹出一个层
2008/03/26 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
JavaScript实现移动端轮播效果
2017/06/06 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
JS字典Dictionary类定义与用法示例
2019/02/01 Javascript
koa router 多文件引入的方法示例
2019/05/22 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
使用Python脚本操作MongoDB的教程
2015/04/16 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
Python decorator拦截器代码实例解析
2020/04/04 Python
为什么称python为胶水语言
2020/06/16 Python
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
住宅质量保证书
2014/04/29 职场文书
广播体操比赛口号
2014/06/10 职场文书
敬老院标语
2014/06/27 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书
解析Java中的static关键字
2021/06/14 Java/Android
Win11开始菜单添加休眠选项
2022/04/19 数码科技