如何从函数内部访问函数名?
// parasitic inheritance
var ns.parent.child = function() {
var parent = new ns.parent();
parent.newFunc = function() {
}
return parent;
}
var ns.parent = function() {
// at this point, i want to know who the child is that called the parent
// ie
}
var obj = new ns.parent.child();
在ES6中,你可以只使用myFunction.name。
注意:为了更好地压缩,一些JS的迷你器可能会丢弃函数名;你可能需要调整他们的设置来避免这种情况。
在ES5中,最好的做法是:
function functionName(fun) {
var ret = fun.toString();
ret = ret.substr('function '.length);
ret = ret.substr(0, ret.indexOf('('));
return ret;
}
使用函数。调用者是非标准的。函数。调用者和实参。在严格模式下,被调用都是被禁止的。
编辑:nus的基于正则表达式的答案实现了同样的事情,但有更好的性能!
我也遇到过类似的问题,解决方法如下:
Function.prototype.myname = function() {
return this.toString()
.substr( 0, this.toString().indexOf( "(" ) )
.replace( "function ", "" );
}
这段代码以一种更舒适的方式实现了我已经在讨论的开头读到的一个响应。
现在我有一个成员函数检索任何函数对象的名称。
这是完整的剧本……
<script language="javascript" TYPE="text/javascript">
Function.prototype.myname = function() {
return this.toString()
.substr( 0, this.toString().indexOf( "(" ) )
.replace("function ", "" );
}
function call_this( _fn ) { document.write( _fn.myname() ); }
function _yeaaahhh() { /* do something */ }
call_this( _yeaaahhh );
</script>