MDN wants to talk to developers like you: https://qsurvey.mozilla.com/s3/8d22564490d8

Function.name

 

function.name 属性返回函数的名称。

Function.name 属性的属性特性:
writable false
enumerable false
configurable true

请注意,在非标准的ES2015之前的实现中,可配置属性也是  false 。

范例

函数语句名称

 name 属性返回一个函数声明的名称。

function doSomething() { }

doSomething.name; 
// "doSomething" 

函数的构造函数名称

使用语法 new Function(...)或只是 Function(...)创建的Function对象, 他们的名字是“anonymous”的。

(new Function).name; 
// "anonymous"

推断函数的名称

变量和方法可以从其句法位置推断匿名函数的名称(ECMAScript 2015 中新增):

var f = function() { };
var object = {
  someMethod: function() {}
};

console.log(f.name); 
// "f"
console.log(object.someMethod.name);
// "someMethod"

console.log(f.name === "f");
// true 
console.log(object.someMethod.name === "someMethod");
//true 



const abc = () => {
    console.log(`this function name is ${abc.name}!`);
}

abc();
// this function name is abc!

let xyz = abc;

xyz.name;
// "abc"


使用语法new Function(...)或者直接 Function(...) 可以创建一个匿名函数, 在Firefox 和 Safari上, 该函数的 name 属性赋值为 "anonymous", 在 最新的Chrome(56) ,该函数的 name 属性为声明的变量名, IE不支持 name 属性.

函数表达式 中, 你可以指定函数的名称:

var object = {
  someMethod: function object_someMethod() {}
};

console.log(object.someMethod.name); 
// "object_someMethod"

try { object_someMethod } catch(e) { alert(e); }
// ReferenceError: object_someMethod is not defined

你不能改变一个函数的 name 属性的值, 因为该属性是只读的:

var object = {
  // someMethod 属性指向一个匿名函数
  someMethod: function() { }
};

object.someMethod.name = "someMethod";

console.log(object.someMethod.name); 
// 空字符串, name属性是只读的.

示例

你可以使用 obj.constructor.name 来查看一个对象所属的"类"的名称:

function A() { }

var b = new A();

alert(b.constructor.name); //Alerts "A"

规范

不在任何规范中.

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) 未实现 (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) 未实现 (Yes) (Yes)

 

文档标签和贡献者

 此页面的贡献者: xgqfrms-GitHub, Marco_dev, teoli, ziyunfei
 最后编辑者: xgqfrms-GitHub,