私が正しく質問を理解していれば、あなたのように渡されるfunction
の名前を取得するつもりはコールバック。あなたのfunction
は次のようになります場合:
function myFunc(/*some parameters*/) {
//Do something
}
あなたは、ほとんどのWebブラウザでmyFunc.name
を使用して、その名前を取得することができます。この防弾を作成するには、このようなfunction
が必要になります。
function getFunctionName(func) {
if (typeof func === "function") { //Make sure the input is a function
if (func.name) { //This is a named function
return func.name;
}
var text = func + "";
text = text.substring(0, text.indexOf("(")).trim();
var spaceIndex = text.indexOf(" ");
if (spaceIndex > 0) { //We need something like function myFunc
return text.substring(text.indexOf(" ")).trim();
}
return ""; //Does not have a name
}
return false; //Not a function
}
今
console.log(getFunctionName(myFunc));
myFuncという
console.log(getFunctionName());
意志のYIを得られますELD
偽
console.log(function() {});
function
に名前がないとして、空の文字列を生成します。私たちはこの
function something() {
this.somethingElse = function() {};
}
のようなものを定義する場合
その後、
console.log(getFunctionName((new something()).somethingElse));
は空の文字列を生成します。明らかに、我々はsomethingElse
を得ることを望むだろうが、我々はこれに追加の調整が必要である。提案:
function nameFunction(func, name) {
func.funcionName = name;
return func;
}
、その後
function something() {
this.somethingElse = nameFunction(function() {}, "somethingElse");
}
、その後、あなたは、このようgetData
からgetFunctionName
を呼び出す準備ができている私たちが今
function getFunctionName(func) {
if (typeof func === "function") { //Make sure the input is a function
if (func.name) { //This is a named function
return func.name;
} else if (typeof func.functionName === "string") { //We called nameFunction on this
return func.functionName;
}
var text = func + "";
text = text.substring(0, text.indexOf("(")).trim();
var spaceIndex = text.indexOf(" ");
if (spaceIndex > 0) { //We need something like function myFunc
return text.substring(text.indexOf(" ")).trim();
}
return ""; //Does not have a name
}
return false; //Not a function
}
に使用されている
function
を変更:
function getData(dataURI, thingToRun) {
var myData = getSomeData();
console.log(getFunctionName(thingToRun));
thingToRun(myData);
}
非常に、非常に良い質問! –