繁体   English   中英

在原型定义中获取此函数的名称

[英]get this function's name within prototype definition

是否可以引用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 ”?

如果这仅是为了调试,则可以使用以下命令,该命令使用堆栈跟踪来查找函数的名称,并利用其在浏览器中查找函数“名称”的作用。 经过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(); 

http://jsfiddle.net/ob0w4z3k/5/上

您可以使用myName.name

(function myName(){
    console.log("This functions name is " + myName.name);
})(); // "This functions name is myName"

但是,请注意,这是ECMAScript 6中引入的,因此大多数浏览器尚不支持它。

只有Firefox支持了很长一段时间,因为它是ES6规范制定之前的非标准功能。

另请参阅MDN文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM