是否可以引用this
函数的名称?例如:
'use strict'
function myClass(){}
myClass.prototype.myName = function myName(data,callback){
console.log("This function has been called: " + "{???}"); // "myName"
}
myClass.prototype.myAge = function(data,callback){
console.log("This function has been called: " + "{???}"); // "myAge"
}
var a = new myClass();
a.myName(); // 'myName'
a.myAge(); // 'myAge';
如何在严格模式下引用“myName
”?
答案 0 :(得分:1)
如果这只是用于调试,您可以使用以下内容,它使用堆栈跟踪查找函数的名称,利用它所做的浏览器魔术来查找“names”功能。在FF,Chrome和IE 10中测试过。
function MyClass() {};
MyClass.prototype.myName = function() {
console.log(getCallerName(), 'I am here');
};
MyClass.prototype.myOtherName = function() {
console.log(getCallerName(), 'I am here again');
};
function doMe() {
console.log(getCallerName(), 'I am here in a named function');
};
function getCallerName() {
try {
throw new Error();
} catch (e) {
if (e.stack) {
var lines = e.stack.split('\n');
// FF (Maybe, Opera and Safari)
var ffMatch = /\b([a-zA-Z1-9\$_\.]*)@/.exec(lines[1]);
if (ffMatch) {
return ffMatch[1];
}
// IE 10+ and chrome
var chromeMatch = /at (.*) /.exec(lines[2]);
if (chromeMatch) {
return chromeMatch[1];
}
}
return 'unknown function';
}
}
var a = new MyClass();
a.myName();
a.myOtherName();
doMe();
播放
答案 1 :(得分:0)
您可以使用myName.name
:
(function myName(){
console.log("This functions name is " + myName.name);
})(); // "This functions name is myName"
但请注意,这是在ECMAScript 6中引入的,因此大多数浏览器还不支持它。
只有Firefox支持它很长一段时间,因为它是非标准功能,在制作ES6规范之前。
另见MDN article。