N
如何制作东西(myObj)console.log myObj,这是对象的名称?如果我要运行此代码,它将打印myObj传入stuff的参数是一个对象和console.log其键和元素。我希望var a存储和console.log对象的名称而不是其内容,在本例中是myObj。
答案 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
循环迭代对象。a
和b
是对象的键,它们映射到元素的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;
答案 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未定义修订顺序枚举对象的属性。第一场比赛将被报告回来!