如何在JavaScript中找到调用方对象

如何在JavaScript中找到调用方对象,javascript,javascript-events,Javascript,Javascript Events,我有 如何找到函数调用的方法和对象的名称?可以使用参数。调用方但不可靠: 它已被替换为具有合理的浏览器支持。您定义和调用A函数的方式调用A的对象将是DOMWindow对象-即全局对象 至于调用X的哪个方法(我想这就是你所说的methodNAME)——以你定义方法的方式(定义匿名函数并将ir分配给属性),你将无法获得名称 您是否像这样声明了X对象: var X={ method1 : function(){ A(); },

我有


如何找到函数调用的方法和对象的名称?

可以使用
参数。调用方
但不可靠:


它已被替换为具有合理的浏览器支持。

您定义和调用
A
函数的方式调用
A
的对象将是
DOMWindow
对象-即全局对象

至于调用
X
的哪个方法(我想这就是你所说的
methodNAME
)——以你定义方法的方式(定义匿名函数并将ir分配给属性),你将无法获得名称

您是否像这样声明了
X
对象:

 var X={
     method1 : function(){
                A();
              },
     method2 : function(){
                A();
              },

    }

function A(){
       console.log('im from methodNAME of ObjNAME ');
}
var X = {
    method1: function method1() {
        A();
    },
    method2: function method2() {
        A();
    },

}
X.method1();
X.method2();
function method1() {
        A();
    }

function method2() {
        A();
    }
而您的
A
功能如下:

 var X={
     method1 : function(){
                A();
              },
     method2 : function(){
                A();
              },

    }

function A(){
       console.log('im from methodNAME of ObjNAME ');
}
var X = {
    method1: function method1() {
        A();
    },
    method2: function method2() {
        A();
    },

}
X.method1();
X.method2();
function method1() {
        A();
    }

function method2() {
        A();
    }
然后打电话:

function A() {
    console.log(A.caller);
}
将产生如下控制台输出:

 var X={
     method1 : function(){
                A();
              },
     method2 : function(){
                A();
              },

    }

function A(){
       console.log('im from methodNAME of ObjNAME ');
}
var X = {
    method1: function method1() {
        A();
    },
    method2: function method2() {
        A();
    },

}
X.method1();
X.method2();
function method1() {
        A();
    }

function method2() {
        A();
    }
然后可以解析并检索调用方法的名称

或者如果您这样定义
A

 var X={
     method1 : function(){
                A();
              },
     method2 : function(){
                A();
              },

    }

function A(){
       console.log('im from methodNAME of ObjNAME ');
}
var X = {
    method1: function method1() {
        A();
    },
    method2: function method2() {
        A();
    },

}
X.method1();
X.method2();
function method1() {
        A();
    }

function method2() {
        A();
    }
然后,上的输出将显示:

function A() {
    console.log(A.caller.prototype);
}
其中
method1
method2
是原型对象,因此您还必须执行一些操作


编辑:修复了错误复制/粘贴=A.caller.prototype->A.caller。

将其作为参数传递给函数不是一个选项吗?这里有两个问题:对象没有名称。分配给它的变量的名称不是对象的名称,您将无法找到它(除非该变量是全局变量)。如果一个对象被分配给多个变量会怎样?与示例中的函数类似。虽然函数可以有名字,通常也有名字,但你的函数没有,它们是匿名的。Felix Kling:一般来说,有没有办法找到全局对象的名字,在我的例子中,X是全局的。只有当你有一个对该对象的引用时。然后,您可以迭代
窗口的属性,比较它们的值,如果有匹配项,就可以得到变量的名称。但是请注意,如果必须这样做,那么您的应用程序设计得并不好。无论如何,你不应该有全局变量。进一步发展全局对象迭代思想。。。如果您有对调用方方法的引用(例如,通过
a.caller
),您可以递归地迭代所有全局对象的所有属性,并检查它们的属性是否为该调用方。谢谢Ariel。。。但是我将得到的方法作为参考。。。我希望方法和对象的名称为字符串..方法的名称为字符串,您可以从它的属性中获取,该属性与
调用者
一样非标准。