2013-02-07 41 views
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); 

其中生成类似农行对象更新,或DEF对象更新,或来电之后ghi对象更新。但保持它的功能范围内,而不是通过像

ghi = monkey(ghi); 
+0

为什么标记为JSON? –

回答

1

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

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 
} 
+0

正在寻找'window [name]'逻辑。我知道这是一些没有意识到“窗口”必须在那里的东西。非常感谢,你给我留下了一个头痛的世界 – chris

0

不知道这是你想要达到的目标。

function monkey(my_var) 
{ 
    console.log('Im ', my_var.id); 
} 
abc = {id: 'abv'}; 
def = {id: 'def'};