javascript获取函数名称、函数参数、对象属性名称的代码实例_基础知识

一、获取函数名称的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>

时间: 2024-09-24 13:41:57

javascript获取函数名称、函数参数、对象属性名称的代码实例_基础知识的相关文章

深入理解JavaScript系列(48):对象创建模式(下篇)_基础知识

介绍 本篇主要是介绍创建对象方面的模式的下篇,利用各种技巧可以极大地避免了错误或者可以编写出非常精简的代码. 模式6:函数语法糖 函数语法糖是为一个对象快速添加方法(函数)的扩展,这个主要是利用prototype的特性,代码比较简单,我们先来看一下实现代码: 复制代码 代码如下: if (typeof Function.prototype.method !== "function") {     Function.prototype.method = function (name, i

Javascript获取窗口(容器)的大小及位置参数列举及简要说明_基础知识

Javascript获取窗口(容器)的大小及位置一系列的东西比较多,容易混淆,在这里列举及简要说明下: 属性方法说明: clientX 相对文档的水平坐标; clientY 相对文档的垂直坐标; offsetX 相对容器的水平坐标; offsetY 相对容器的垂直坐标; scrollWidth 获取对象的滚动宽度; scrollHeight 获取对象的滚动高度; scrollLeft 设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 ; scrollTop 设置或获取位于对象最顶端

深入理解JavaScript系列(47):对象创建模式(上篇)_基础知识

介绍 本篇主要是介绍创建对象方面的模式,利用各种技巧可以极大地避免了错误或者可以编写出非常精简的代码. 模式1:命名空间(namespace) 命名空间可以减少全局命名所需的数量,避免命名冲突或过度.一般我们在进行对象层级定义的时候,经常是这样的: 复制代码 代码如下: var app = app || {}; app.moduleA = app.moduleA || {}; app.moduleA.subModule = app.moduleA.subModule || {}; app.mod

javascript对象的使用和属性操作示例详解_基础知识

JavaScript 中所有变量都是对象,除了两个例外 null 和 undefined. 复制代码 代码如下: false.toString(); // 'false'[1, 2, 3].toString(); // '1,2,3' function Foo(){}Foo.bar = 1;Foo.bar; // 1 一个常见的误解是数字的字面值(literal)不是对象.这是因为 JavaScript 解析器的一个错误, 它试图将点操作符解析为浮点数字面值的一部分. 复制代码 代码如下: 2.

javascript 内置对象及常见API详细介绍_基础知识

一. 类与对象    在 JavaScript世界里,关于面向对象第一个要澄清的概念就是类.对象都是由类来定义的,通过类来创建对象就是我们所熟悉的实例化.然而,在 JavaScript中别没有真正的类,对象的定义就是对象自身.而 ECMA-262 干脆把这种妥协的方式称作为对象的调和剂.为了方便理解,我通常把这个发挥类的作用的调和剂称为类.    Javascript内置对象学习 全局属性 Infinity 表示正无穷大的数值 NaN 非数字值 undefined 未定义的值 decodeURI

javascript获取元素CSS样式代码示例_基础知识

使用css控制页面有4种方式,分别为行内样式(内联样式).内嵌式.链接式.导入式. 行内样式(内联样式)即写在html标签中的style属性中,如<div style="width:100px;height:100px;"></div> 内嵌样式即写在style标签中,例如<style type="text/css">div{width:100px; height:100px}</style> 链接式即为用link标签

JavaScript常用全局属性与方法记录积累_基础知识

最近,在学习JavaScript,Java作域链包含全局,记录下常用的全局属性与方法,就当是知识的积累,未列出全部,如需查看全部可参考JS相关的API文档. 常用的全局属性: 全局属性      作用                              Infinity 表示正无穷大的数值 NaN 非数字值  undefined 未定义的值 常用的全局方法:  全局方法      作用                              encodeURI() 返回参数的副本,其中某

JavaScript与DOM组合动态创建表格实例_基础知识

简介 这篇文章简单介绍了DOM 1.0一些基本而强大的方法以及如何在JavaScript中使用它们.你可以学到如何动态地创建.获取.控制和删除HTML元素.这些DOM方法同样适用于XML.所有全面支持DOM 1.0的浏览器都能很好地运行本篇的实例,比如IE5,Firefox等.概况 - Sample1.html 这篇文章通过实例代码介绍DOM.请从尝试下面的HTML例子开始.它使用DOM 1的方法由JavaScript动态创建一个HTML表格.它创建一个由四个包含文本内容的单元格组成的小表格.单

javascript学习笔记(五)原型和原型链详解_基础知识

私有变量和函数 在函数内部定义的变量和函数,如果不对外提供接口,外部是无法访问到的,也就是该函数的私有的变量和函数. 复制代码 代码如下: <script type="text/javascript">     function Test(){         var color = "blue";//私有变量         var fn = function() //私有函数         {         }     } </script