函数name属性

在函数声明和函数命名表达式中都有name属性。很多资料中都说明函数声明和命名函数表达式中都已定义了name属性,对此我也深信不疑。今天做了一个小测试,发现在IE下函数的name属性一直都是未定义。

 1 function foo() {};//函数声明
 2 var bar = function(){};//函数表达式
 3 var baz = function baz(){};//命名表达式
 4 
 5 //Firefox,WebKit
 6 console.log(foo.name);//"foo"
 7 console.log(bar.name);//""
 8 console.log(baz.name);//"baz"
 9 
10 //IE
11 console.log(foo.name);//"undefined"
12 console.log(bar.name);//"undefined"
13 console.log(baz.name);//"undefined"

  在IE下获取函数名称可以使用toString()方法,然后使用正则表达式匹配:

1 /**扩充函数原型,获取函数名*/
2 Function.prototype.getSelfName = function() {
3     return typeof this.name === "string" ? this.name : /function\s+([^\{\(\s]+)/.test(this.toString()) ? RegExp['$1'] : '[Unknown]';
4};
原文地址:https://www.cnblogs.com/wuzy/p/3009312.html