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 相关文章推荐
远离JS灾难css灾难之 js私有函数和css选择器作为容器
Dec 11 Javascript
获取内联和链接中的样式(js代码)
Apr 11 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
Aug 18 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
Feb 23 Javascript
jQuery读取XML文件内容的方法
Mar 09 Javascript
Jquery实现瀑布流布局(备有详细注释)
Jul 31 Javascript
JS实现IE状态栏文字缩放效果代码
Oct 24 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
May 12 Javascript
jquery自适应布局的简单实例
May 28 Javascript
AngularJs $parse、$eval和$observe、$watch详解
Sep 21 Javascript
angular json对象push到数组中的方法
Feb 27 Javascript
javascript实现摄像头拍照预览
Sep 30 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获得flv视频长度的实例代码
2017/10/26 PHP
Laravel相关的一些故障解决
2020/08/19 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
HTML Dom与Css控制方法
2010/10/25 Javascript
nodeType属性返回被选节点的节点类型介绍
2013/11/22 Javascript
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
jQuery视差滚动效果网页实现方法经验总结
2016/09/29 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
Vue列表页渲染优化详解
2017/07/24 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
2019/08/02 jQuery
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
[01:29]2017 DOTA2国际邀请赛官方英雄手办展示
2017/03/18 DOTA
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
python中的格式化输出用法总结
2016/07/28 Python
python 二维数组90度旋转的方法
2019/01/28 Python
python 获得任意路径下的文件及其根目录的方法
2019/02/16 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
python添加菜单图文讲解
2019/06/04 Python
python 字符串常用函数详解
2019/09/11 Python
如何在python中执行另一个py文件
2020/04/30 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
大学生个人求职信范文
2013/09/21 职场文书
高中生自我鉴定范文
2013/10/30 职场文书
电气工程自动化求职信
2014/03/14 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
死亡证明书样本说明
2014/10/18 职场文书
毕业论文致谢词
2015/05/14 职场文书
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis