3

渡されたものに応じて、他の変数を使用する関数があります。

同様のthis = ActionBar(slot)スロットには「1つ」が含まれています。

その中に呼び出しを作成したいのですobject.slot.nameが、コマンドをのように見せるために、事前にそれを変換する必要がありますobject.one.name。javascript / jqueryでこれを行う方法はありますか?

他の言語がこれを{slot}などとして行っていることを漠然と覚えています。

この質問がすでに出されている場合は申し訳ありませんが、私はgoogleとstackoverflowもチェックしましたが、答えが見つかりませんでした。

また、この種の変数の受け渡しに適切なプログラミング用語は何ですか?

誤解の原因を編集しました。私はOOPjsを調べているので、オブジェクトはオブジェクト、1つはオブジェクト、名前は属性ですが、渡すときは「1つ」を文字列として関数に渡します。

評価を試みましたが、オブジェクトが点在している間は機能しません。

ソースコード:

function disableActionButton(slot){
    $("#"+slot).attr("disabled","disabled")
    gcd = player.slot.gcd*1000
    cd = setInterval(function(){
            gcd = gcd - 10
            $("#"+slot).val(gcd+"ms").css("color","red");
    },10)
    setTimeout(function(){
            window.clearInterval(cd)
            $("#"+slot).removeAttr("disabled").css("color","black").val(player.slot.name);
    }, player.slot.gcd*1000)    
}
4

1 に答える 1

3

現在の構造が何であるかは本当に不明です (コードを投稿したので、より明確になりました。以下の「更新」を参照してください)が、基本的にJavaScriptでこの種のことを行う方法は、コンテナーオブジェクトを用意することです。(まだ持っていない場合は、導入してください。)次にslot、次のように、そのオブジェクトのプロパティを参照できます。

var container = {
    one: "This is one",
    two: "This is two"
};

// ...

function foo(slot) {
    console.log(container[slot]);
}

// ...

foo("one"); // ends up logging "This is one"
foo("two"); // ends up logging "This is two"

これが機能するのは、コンテナオブジェクトにプロパティがあり、JavaScriptでは次の2つの方法で参照できるためです。

  1. ドット表記とリテラル名を使用します。例:container.one、または

  2. 文字列に括弧で囲まれた表記と名前を使用しますcontainer["one"]。例:

プロパティ名の由来を除いて、これらはまったく同じです。そしてもちろん、2番目のケースでは、プロパティ名はリテラル文字列である必要はありません。変数参照を含む任意の式の結果である可能性があります(たとえば、から名前を取得できますslot)。

これは、関数を参照するプロパティを含む、すべてのオブジェクトプロパティで機能します。私はあなたがあなたの質問で関数に言及したという理由だけでこれに言及します、それであなたがそうする必要があるならば、あなたはこれをすることができます:

function foo(slot) {
    container[slot]();
}

...これはcontainer、引数によって保持されている名前でそのプロパティの関数を呼び出しslotます。したがって、の場合、それは行いslotます。"one"container.one()


更新

ソースは上記のコンテナの例を直接エコーします。上記を適用するだけです。

function disableActionButton(slot){
    $("#"+slot).attr("disabled","disabled")
    // ---------v----v---- here
    gcd = player[slot].gcd*1000
    cd = setInterval(function(){
            gcd = gcd - 10
            $("#"+slot).val(gcd+"ms").css("color","red");
    },10)
    setTimeout(function(){
            window.clearInterval(cd)
    // ------------------------------------------------------------ and here--v----v
            $("#"+slot).removeAttr("disabled").css("color","black").val(player[slot].name);
    // ------v----v------- and here
    }, player[slot].gcd*1000)    
}

または、スロットデータを毎回検索するのではなく、一度取得して再利用します。

function disableActionButton(slot){
    // Grab it once...
    var slotdata = player[slot];

    $("#"+slot).attr("disabled","disabled")
    // ---vvvvvvvvv--- then use it
    gcd = slotdata.gcd*1000
    cd = setInterval(function(){
            gcd = gcd - 10
            $("#"+slot).val(gcd+"ms").css("color","red");
    },10)
    setTimeout(function(){
            window.clearInterval(cd)
            $("#"+slot).removeAttr("disabled").css("color","black").val(slotdata.name);
    }, slotdata.gcd*1000)    
}

これには特別な名前はありません。プロパティ名を関数に渡しており、関数はplayerその名前を使用してオブジェクトのプロパティを検索しています。他のいくつかの言語では、これは「リフレクション」と呼ばれることがありますが、この用語はJavaScriptのような動的言語には実際には適用されません。

于 2012-10-27T16:51:19.680 に答える