我有
var X={
method1 : function(){
A();
},
method2 : function(){
A();
},
}
function A(){
console.log('im from methodNAME of ObjNAME ');
}
如何找到该函数正在调用的方法和对象的名称。?
答案 0 :(得分:5)
您可以使用arguments.caller
,但这不可靠:
https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope/arguments/caller
它已被https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/caller取代,似乎有合理的浏览器支持。
答案 1 :(得分:-1)
您定义并调用A
函数的方式是调用A
的对象将是DOMWindow
对象 - 即全局对象。
至于X
调用它的方法(这是methodNAME
的意思,我假设) - 在你定义方法的方式中(定义一个匿名函数并赋值给财产)你将无法得到这个名字。
您是否已将此X
对象声明为:
var X = {
method1: function method1() {
A();
},
method2: function method2() {
A();
},
}
和您的A
功能如下:
function A() {
console.log(A.caller);
}
然后打电话:
X.method1();
X.method2();
将产生如下控制台输出:
function method1() {
A();
}
function method2() {
A();
}
然后您可以解析并检索调用方法的名称。
或者如果你这样定义A
:
function A() {
console.log(A.caller.prototype);
}
然后输出将显示:
method1
method2
其中method1
和method2
是原型对象 - 因此您还必须执行一些操作。
编辑:修复了错误的复制/粘贴= A.caller.prototype - > A.caller。