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 传统事件模型构造的事件监听器实现代码
May 31 Javascript
JavaScript实现多个重叠层点击切换效果的方法
Apr 24 Javascript
Vue2实现组件props双向绑定
Dec 02 Javascript
js实现九宫格的随机颜色跳转
Feb 19 Javascript
详解使用webpack构建多页面应用
Dec 21 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
Apr 17 jQuery
vue-cli 打包后提交到线上出现 &quot;Uncaught SyntaxError:Unexpected token&quot; 报错
Nov 06 Javascript
详解微信小程序用定时器实现倒计时效果
Apr 30 Javascript
create-react-app中添加less支持的实现
Nov 15 Javascript
使用js实现单链解决前端队列问题的方法
Feb 03 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
Feb 10 Javascript
Vue实现简单的留言板
Oct 23 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
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
详解PHP中strlen和mb_strlen函数的区别
2014/03/07 PHP
php中stdClass的用法分析
2015/02/27 PHP
Javascript中的数学函数
2007/04/04 Javascript
JavaScript开发时的五个注意事项
2007/12/08 Javascript
js 自制滚动条的小例子
2013/03/16 Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
2013/12/06 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
js如何调用qq互联api实现第三方登录
2014/03/28 Javascript
JS中Location使用详解
2015/05/12 Javascript
JS获取input file绝对路径的方法(推荐)
2016/08/02 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
对angular 实时更新模板视图的方法$apply详解
2018/10/09 Javascript
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
细说Vue组件的服务器端渲染的过程
2019/05/30 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
js实现车辆管理系统
2020/08/26 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
Python字符串中查找子串小技巧
2015/04/10 Python
详解Python多线程
2016/11/14 Python
Python实现登录接口的示例代码
2017/07/21 Python
Python 使用 docopt 解析json参数文件过程讲解
2019/08/13 Python
Django的CVB实例详解
2020/02/10 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
python文件排序的方法总结
2020/09/13 Python
python中entry用法讲解
2020/12/04 Python
Python实现石头剪刀布游戏
2021/01/20 Python
Python是如何进行类型转换的
2013/06/09 面试题
大学生饮食配送创业计划书
2014/01/04 职场文书
2015年派出所工作总结
2015/04/24 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书
《小乌鸦爱妈妈》教学反思
2016/02/19 职场文书
2019暑假学生安全口号
2019/06/27 职场文书