1

だからここに奇妙なものがあります:

var a = true;
function f(v){ v = !v; }        //can this function actually change a?
f(a);   //a is still true..         

v内部変数の場合、関数は明らかに値のみを変更します。

DOM実行時に要素のプロパティの値を動的に変更する必要があるアプリケーションで、この作業に遭遇しました。理想的には、プロパティを引数として取り、それを再割り当てする関数が必要ですよね?

明確にするために-実際には、実行時にDOM要素の属性に新しい値を割り当てようとしています。オブジェクトのメンバーを反復処理するリフレクターアプリケーションがあり、遭遇するプロパティの値を変更できるようにしたいので、f function は、リフレクトされたオブジェクトのすべてのブール型プロパティに対して booleanSwitch オブジェクトを構築する BooleanSwitch コンストラクター関数に属します。booleanSwitch は、画面上の単純なボタンにすることができます。ボタンをクリックするだけで、手元にあるオブジェクトの実際のプロパティの値を変更できるようにしたい..誰かがこれを行う方法を考えられますか?

どんな考えも評価されます..

4

4 に答える 4

3

プリミティブ値は値で渡されますその関数にブール値を渡すためa、外部で宣言された variable の値を変更することはできません。

于 2012-10-28T00:13:21.360 に答える
1

オブジェクト (配列、関数) は参照として渡されます。他のすべてのタイプ (int、string など) がコピーされます。

あなたの例では、「v」は「a」のコピーであるため、「a」は変更されません。

switch 関数から値を返し、それを a に割り当てる必要があります。例えば:

function switch(v)
{
//do something
return v;
}

a = switch(a);
于 2012-10-28T00:16:58.797 に答える
1

関数は値を返す必要があります。

function switchValue(v){ 
  return !v;
}        

var a = true;
switchValue(a);

これは JavaScript 参照機能によるものです。変数を渡して返さない場合、変数はローカルでのみ変更されます。変更したい場合は、具体的に返却する必要があります。

于 2012-10-28T00:22:52.090 に答える
0

これを行うための良い方法を見つけました:

他のプリミティブ値は値によって渡されますが、オブジェクトは参照によって渡されるため、ブール値です。関数 f に渡されるブール値は、オブジェクトに属している場合、参照によって渡すことができます。それで:

var a = true;
function f(v, z){
    v[z] = !v[z];
{
f(window, "a");

これは少し奇妙に見え、まだハードコードされていますが、オブジェクトを反復処理するときにプロパティを動的に操作することができます。

私の実際のアプリケーションでは、次のようになります。

function BooleanSwitch(obj, property){
    var btn = document.createElement("button");
    btn.onclick = function(){
        obj[property] = !obj[property];
    }
    return btn;
}

function reflect(obj){
    for(member in obj){
        switch(typeof(obj[member])){
            case "boolean":
                var booleanSwitch = BooleanSwitch(obj, member);
                document.body.appendChild(booleanSwitch);  //or whatever..
                break;
            case "string": //..other stuff..
        }
    }
}

reflect(document);    

これにより、ドキュメント オブジェクトの列挙可能なブール プロパティごとにブール スイッチが作成されます。このボタンをクリックすると、ドキュメントの実際のプロパティが変更されます。

于 2012-10-28T13:01:35.643 に答える