如何在javascript中从函数内部和外部获取函数名称?

1,713 阅读2分钟

在这篇文章中,你将学习如何从函数内部和外部获取函数名称。

如下图所示,可以创建带有名称的函数,称为命名函数。

function namedfunction() {
    // code inside function
}

另外,没有名字的函数被称为匿名函数(无名)。

 var anonymousFunction = function() {
    // code inside function
};

ES6获取函数名的方法

我们可以用以下方法获得函数名

  • function.name
  • object.constructor.name

函数名属性

ECMAScript 6引入了Function对象,该对象有name 属性来给出函数的名称。

它是只读属性

让我们看看如何获得命名的函数

function myfunction() {
  console.log("my function"); 
}
console.log(myfunction.name); //myfunction
console.log(myfunction.prototype.constructor.name); //myfunction

constructor.name属性

我们也可以用对象来获取函数名

让我们创建一个函数的对象。

对象有一个构造器对象,它有一个name 属性。如下所示,这也可以用类的原型来调用。

下面是一个语法

{function}.prototype.constructor.name
{object}.constructor.name

下面是一个代码example get name of named function

function myfunction1() {
  console.log("myfunction1"); //Person
}
var mf = new myfunction1();
console.log(myfunction1.prototype.constructor.name); //myfunction1
console.log(mf.constructor.name);  //myfunction1

以下是一个函数的代码example to get name of anonymous function

const myfunction=function() {
  console.log("my function"); 
}
console.log(myfunction.name); //myfunction
console.log(myfunction.prototype.constructor.name); //myfunction

如何获得运行中的函数名称

在javascript中,我们有一个正在运行的函数,并想在一个主体中获得该函数的名称。

我们可以通过多种方式获得函数的名称

arguments.callee返回函数定义,从该定义中使用字符串函数获得函数名称。

下面是一个完整的代码例子

function myfunction() {
        var functName = arguments.callee.toString();
        console.log(functName); // prints function defination
        functName = functName.substr('function '.length);        
        functName = functName.substr(0, functName.indexOf('('));        
        console.log(functName);
}
myfunction();

另一种方法是获取arguments.callee.name。

在这个例子中,函数被定义并从全局范围外调用。

function myfunction1() {
    console.log( arguments.callee.name );
}

myfunction1();

如何在javascript中获取动态函数名

由于动态函数是以不同的名字动态创建的

让我们创建一个动态函数,其变量包含函数的名称。

在一个函数中,你可以直接访问名称,从而返回函数的名称。

var dynamicfunction = 'myfunction';

window[dynamicfunction] = function() {
    console.log(dynamicfunction);
}

总结

你学到了在运行中的函数内部和外部全局范围内查找函数名称的多种方法