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

时间:2016-02-15 11:44:40

标签: javascript jquery

N

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

4 个答案:

答案 0 :(得分:2)

你做不到。 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" };

答案 1 :(得分:1)

  

使用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>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

有可能!你可以这样做:

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

答案 3 :(得分:0)

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

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

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

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

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