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

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

本文关键字:参数 函数 对象 变量名 jQuery 何使用 访问 Javascript      更新时间:2023-09-26
var myObj = {
  key: "element",
  key2: "element2"
}    
function stuff(obj) {
  var a = obj;
  console.log(a);
}
stuff(myObj);

如何制作东西(myObj(控制台.log myObj,这是对象的名称?如果我运行这段代码,它会打印 myObj 传递给东西的参数是一个对象和控制台.log它的键和元素。我希望 var a 存储和控制台.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 没有定义枚举对象属性的固定顺序。第一场比赛将被报告!