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

これを行う方法を私が知っている唯一の方法は、囲んでいるスコープを追加のパラメーターとして渡し、変数のではなく名前を渡すことです。

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 に答える