繁体   English   中英

如何使用jQuery访问Javascript中作为函数参数的对象的变量名?

[英]How do I access the variable name of an object that is a function argument in Javascript with jQuery?

var myObj = {
  key: "element",
  key2: "element2"
}    

function stuff(obj) {
  var a = obj;
  console.log(a);
}
stuff(myObj);

我如何制作东西(myObj)console.log myObj,这是对象的名称? 如果我要运行此代码,它将打印myObj传入stuff的参数是一个对象和console.log其键和元素。 我想var a存储和console.log对象的名称而不是其内容,在本例中,是myObj。

你不能。 JavaScript按值传递,与用于传递对象的变量没有任何关联。

举个例子:

var foo = {};
var bar = foo;
window.baz = bar;
stuff(foo);
function stuff(obj) {
  var a = obj;
  console.log(a);
}

您现在有5个变量/属性,它们都是同一对象的“名称”。

如果您需要某个对象具有某种标识名称,请将其作为属性提供。

var foo = { name: "foo" };

使用for-in循环迭代对象。 ab是对象的键,它们映射到元素的id ..

尝试这个:

 var obj = { a: "A", b: "B" }; for (var i in obj) { $('#' + i).hide(); } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div id="a">A</div> <div id="b">B</div> <div id="c">C</div> <div id="d">D</div> 

有可能的! 你可以这样做:

function stuff(obj) {
  var a = Object.keys(window);
  a.forEach(function(item, i, a) {
    if (window[item] == obj)
    {
       console.log((item);
    }
  });
}

没有(好的)方法可以做到这一点。 myObj变量有一个指向内存中对象的指针。 当您将myObj作为参数发送给函数时,它将通过引用发送,因此函数的obj参数也将具有指向内存中对象的指针。 此时,全局变量myObj和局部变量obj是同一对象的同义词。 修改一个属性也会影响另一个变量。 从理论上讲,可能有数百个变量指向同一个对象,但是该对象永远不会有任何链接返回指向它的任何变量,因此无法检索对象的名称。 没有正确的或原始的变量:无论它们链接到此对象的顺序如何,所有变量都是相同的。

这说,当然如果myObj是一个全局变量,就可以将你的变量与窗口对象的所有属性进行比较,然后知道它最初是哪个变量,但这是对处理能力的极大浪费。 它只适用于全局变量。

所以这应该是全局变量的技巧,但我强烈建议不要这样做(最重要的是如果它是一个包含大量全局变量的大项目)。 尽管如此,如果在编程期间仅用于调试,我认为这是关于它的,它可能会有所帮助:

function getVariableName(x) {
    for (var i in window) {
        if (window[i] === x) return i;
    }
    return false;
}

注意:如果您有多个指向此对象的全局变量,则无法知道您将返回哪些变量名称... javascript未定义枚举对象属性的修订顺序。 第一场比赛将被报道回来!

暂无
暂无

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

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