Get JavaScript function-object from its name as a string?の反対のことをしたいですか?
つまり、次のようになります。
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?の反対のことをしたいですか?
つまり、次のようになります。
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
(存在しますか?) の場合は、直接追加します。
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];
}
});
}
function bar(callback){
var name=callback.toString();
var reg=/function ([^\(]*)/;
return reg.exec(name)[1];
}
>>> function foo() { };
>>> bar(foo);
"foo"
>>> bar(function(){});
""
var x = function fooBar(){};
console.log(x.name);
// "fooBar"
オブジェクトと関数名を次のように抽出できます。
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"
.name
プロパティへのアクセスを試みます。
callback.name
私にとっては、少し変更するだけで(親の前に\を追加する)、これは機能します:
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 a = document.form1
a.onsubmit.name