0

好的,我不知道我是否能够完全描述我正在做的事情的范围,但希望我可以在这里传达一些层次,希望有人能理解。所以..

我在我的javascript中定义了这些全局变量,即:

var abc = '';
var def = '';
var ghi = '';

有了这些变量,我稍后可以通过函数在我的脚本中定义它们。所以它们稍后可以被其他功能重用。那部分我已经很好了。现在我有一个有趣的想法,让我很难过。这种情况下的变量最终是我在函数之间传递的对象,我可以将其用于各种比较,并根据需要进行更新。现在我已经到了需要在特定函数的末尾重新定义整个对象的地步。但我只是在对象本身周围传递,所以关于哪个对象是起点的参考丢失了。

所以现在我想弄清楚有没有一种方法可以重新定义它,比如我的功能是

function monkey(var)
{
   //code to do stuff
   //something here after stuff to redefine var as the object it once was referenced
   //example ghi = something_from_code_generation_above
}
monkey(abc);
monkey(def);
monkey(ghi);

在进行这样的调用之后,abc 对象更新、def 对象更新或 ghi 对象更新。但是将其限制在函数内,而不是通过像这样的闭包

ghi = monkey(ghi);
4

2 回答 2

1

我知道如何做到这一点的唯一方法是将封闭范围作为额外参数传递,并传递name,而不是变量的

monkey(window, "abc"); // sends the global variable "abc" and allows it to be modified

function monkey(scope, name)
{
    var v = scope[name];
    // do stuff to v
    scope[name] = whatever; // destructively updates the variable in the original scope
}

如果您已经知道传递的所有变量都将在特定范围内(例如,它们都是某些已知命名对象的一部分),您可以只通过字符串传递变量名称。

如果它们都是全局变量,正如您在问题中指出的那样,请执行以下操作:

monkey("abc"); // instead of monkey(abc);
function monkey(name)
{
    var v = window[name];
    window[name] = whatever; // updates the global variable by name
}
于 2013-02-07T21:36:47.793 回答
0

不确定这是您想要实现的目标。

function monkey(my_var)
{
   console.log('Im ', my_var.id);
}
abc = {id: 'abv'};
def = {id: 'def'};
于 2013-02-07T21:36:57.103 回答