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 的继承
Oct 01 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
Apr 08 Javascript
JavaScript实现弹出子窗口并传值给父窗口
Dec 18 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
May 18 Javascript
JS添加或修改控件的样式(Class)实现方法
Oct 15 Javascript
JavaScript实现时间表动态效果
Jul 15 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
Oct 25 Javascript
vue组件之间通信实例总结(点赞功能)
Dec 05 Javascript
如何检查一个对象是否为空
Apr 11 Javascript
小程序云开发之用户注册登录
May 18 Javascript
Vue Components 数字键盘的实现
Sep 18 Javascript
用javascript制作qq注册动态页面
Apr 14 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动态页生成静态页的3种常用方法
2014/11/13 PHP
php显示指定目录下子目录的方法
2015/03/20 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
input的focus方法使用
2010/03/13 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
js返回前一页刷新本页重载页面
2014/07/29 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
2015/07/01 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
详解jQuery中的isPlainObject()使用方法
2018/02/27 jQuery
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
React生命周期原理与用法踩坑笔记
2020/04/28 Javascript
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
使用python实现rsa算法代码
2016/02/17 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
python opencv人脸检测提取及保存方法
2018/08/03 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
Python实现最大子序和的方法示例
2019/07/05 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
简单了解python装饰器原理及使用方法
2019/12/18 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
python如何进入交互模式
2020/07/06 Python
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
数控技校生自我鉴定
2014/04/19 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
工厂无线对讲系统解决方案
2022/02/18 无线电