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 特殊字符串
Feb 25 Javascript
js打印纸函数代码(递归)
Jun 18 Javascript
javascript将数组插入到另一个数组中的代码
Jan 10 Javascript
jquery在Chrome下获取图片的长宽问题解决
Mar 20 Javascript
jquery ztree实现模糊搜索功能
Feb 25 Javascript
Vue.js组件tree实现省市多级联动
Dec 02 Javascript
分享5个好用的javascript文件上传插件
Sep 16 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
Nov 23 Javascript
json解析大全 双引号、键值对不在一起的情况
Dec 06 Javascript
微信小程序之左右布局的实现代码
Dec 13 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
Aug 18 Javascript
JS sort排序详细使用方法示例解析
Sep 27 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中使用session防止用户非法登录后台的方法
2015/01/27 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
JavaScript实现两个Table固定表头根据页面大小自行调整
2014/01/03 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
完美的js div拖拽实例代码
2016/09/24 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
vue音乐播放器插件vue-aplayer的配置及其使用实例详解
2017/07/10 Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
2017/08/16 Javascript
解决layui 复选框等内置控件不显示的问题
2018/08/14 Javascript
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
2018/09/28 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
Vue的Options用法说明
2020/08/14 Javascript
Python unittest单元测试框架总结
2018/09/08 Python
NumPy排序的实现
2020/01/21 Python
python 装饰器重要在哪
2021/02/14 Python
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
沙特阿拉伯电子产品和家用电器购物网站:Black Box
2019/07/24 全球购物
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
国际经济贸易专业推荐信
2013/11/06 职场文书
毕业生就业意向书
2014/04/01 职场文书
员工激励培训演讲稿
2014/09/16 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
捐书活动倡议书
2015/04/27 职场文书
天气温馨提示语
2015/07/14 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python