1

私は以下の機能を持つjsファイル(rework.js)を持っています

/**
 * Java script functions to set comments for selected rework reason.
 */
function setReworkCheckFields() {
    var note = $("#rework_note").val();
    var reworknoteImage = document.getElementsByName("reworknote_image");
    var reworknoteScript = document.getElementsByName("reworknote_script");
    var reworknoteVoice = document.getElementsByName("reworknote_voice");
    var reworknoteMusic = document.getElementsByName("reworknote_music");
    if ($(reworknoteImage).is(':checked')) {
        $("#reworknote_image_note").val(note);
    }
    if ($(reworknoteScript).is(':checked')) {
        $("#reworknote_script_note").val(note);
    }
    if ($(reworknoteVoice).is(':checked')) {
        $("#reworknote_voice_note").val(note);
    }
    if ($(reworknoteMusic).is(':checked')) {
        $("#reworknote_music_note").val(note);
    }
}

そして私はこのjsファイルをhtmlにインポートし、以下のhtmlにあるように異なる実装で同じメソッドを追加しました

<script type='text/javascript' src='style/js/rework.js'></script>

<script type='text/javascript'>
function setReworkCheckFields() {
    var note = $("#rework_note").val();
    var reworknoteImage = document.getElementsByName("reworknote_image");
    var reworknoteScript = document.getElementsByName("reworknote_script");
    var reworknoteVoice = document.getElementsByName("reworknote_voice");
    var reworknoteMusic = document.getElementsByName("reworknote_music");
    if ($(reworknoteImage).is(':checked')) {
        $("#reworknote_image_note").val(note);
    } else {
        $("#reworknote_image_note").val(null);
    }
    if ($(reworknoteScript).is(':checked')) {
        $("#reworknote_script_note").val(note);
    } else {
        $("#reworknote_script_note").val(null);
    }
    if ($(reworknoteVoice).is(':checked')) {
        $("#reworknote_voice_note").val(note);
    } else {
        $("#reworknote_voice_note").val(null);
    }
    if ($(reworknoteMusic).is(':checked')) {
        $("#reworknote_music_note").val(note);
    } else {
        $("#reworknote_music_note").val(null);
    }
}
</script>

以下のjavascript関数を呼び出します。

<table>
     <tr>
         <td>Image: <input type="checkbox" name="reworknote_image" ${reworknote_image.workingchecked} onchange="setReworkCheckFields()"/></td>
         <td>Script: <input type="checkbox" name="reworknote_script" ${reworknote_script.workingchecked} onchange="setReworkCheckFields()"/></td>
         <td>Voice: <input type="checkbox" name="reworknote_voice" ${reworknote_voice.workingchecked} onchange="setReworkCheckFields()"/></td>
         <td>Music: <input type="checkbox" name="reworknote_music" ${reworknote_music.workingchecked} onchange="setReworkCheckFields()"/></td>
     </tr>
</table>

フローがどのように機能するかを誰かに教えてください。これは書くのに有効ですか?

4

2 に答える 2

1

2 番目の関数は最初の関数を再宣言するため、呼び出すsetReworkCheckFields()と 2 番目の関数が実行されます。

はい、有効です。変数をオーバーライドするのと同じです。

この関数をコードでもう一度宣言すると、この定義も再宣言されることに注意してください。場合によっては便利な動作ですが、js 関数の再宣言には注意が必要です。

于 2013-03-20T09:22:42.200 に答える
1

いいえ - フローは、最後の関数のみが js スコープで定義されているため、同様の名前の js コードをオーバーライドします。

JavaScript には、Java や他の言語のような関数オーバーロードはありません。ただし、コードを別の名前空間にラップできます。

var MyFirstNameSpace = {
    setReworkCheckFields: function(){
         // code goes here...
    } 
};

var MySecondNameSpace = {
    setReworkCheckFields: function(){
         // code goes here...
    } 
};

その後、MyFirstNameSpace.setReworkCheckFields() または MySecondNameSpace.setReworkCheckFields(); のいずれかを呼び出すことができます。

一般に、プロジェクトに含まれる他の js コードがわからず、独自のコードを台無しにするため、javascript グローバル スコープをオーバーライドすることはお勧めできません。

于 2013-03-20T09:22:56.033 に答える