如何在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。。。但是我将得到的方法作为参考。。。我希望方法和对象的名称为字符串..方法的名称为字符串,您可以从它的属性中获取,该属性与调用者
一样非标准。