我想要做的Get JavaScript function-object from its name as a string?从Javascript函数参考中获取名称作为字符串?
这是相反的,因为:
function foo()
{}
function bar(callback)
{
var name = ???; // how to get "foo" from callback?
}
bar(foo);
我如何获得一个参考后面的函数的名称?
我想要做的Get JavaScript function-object from its name as a string?从Javascript函数参考中获取名称作为字符串?
这是相反的,因为:
function foo()
{}
function bar(callback)
{
var name = ???; // how to get "foo" from callback?
}
bar(foo);
我如何获得一个参考后面的函数的名称?
如果您不能使用myFunction.name
那么您可以:
// Add a new method available on all function values
Function.prototype.getName = function(){
// Find zero or more non-paren chars after the function start
return /function ([^(]*)/.exec(this+"")[1];
};
或为现代浏览器,唐不支持name
属性(do它们存在)直接添加:
if (Function.prototype.name === undefined){
// Add a custom property to all function values
// that actually invokes a method to get the value
Object.defineProperty(Function.prototype,'name',{
get:function(){
return /function ([^(]*)/.exec(this+"")[1];
}
});
}
var x = function fooBar(){};
console.log(x.name);
// "fooBar"
尝试访问.name
属性:
callback.name
function bar(callback){
var name=callback.toString();
var reg=/function ([^\(]*)/;
return reg.exec(name)[1];
}
>>> function foo() { };
>>> bar(foo);
"foo"
>>> bar(function(){});
""
如果您正在寻找在一个特定的对象事件的功能,这可能会帮助:
var a = document.form1
a.onsubmit.name
可以提取对象和函数的名称用:
function getFunctionName()
{
return (new Error()).stack.split('\n')[2].split(' ')[5];
}
例如:
function MyObject()
{
}
MyObject.prototype.hi = function hi()
{
console.log(getFunctionName());
};
var myObject = new MyObject();
myObject.hi(); // outputs "MyObject.hi"
对我来说,只是一个小修改(添加父前\),这项工作:
if (Function.prototype.name === undefined){
// Add a custom property to all function values
// that actually invokes a method to get the value
Object.defineProperty(Function.prototype,'name',{
get:function(){
return /function ([^\(]*)/.exec(this+"")[1];
}
});
}
'变种的蝙蝠= foo的;酒吧(蝙蝠)' - 现在应该打印什么? – Alnitak
@Alnitak。它应该打印'foo'。这是函数名称。 'bat'是一个引用'foo'函数的变量。 – gdoron
如果回调没有名字会发生什么? - 即'bar(function(){...});' – Spudley