javascript具有不同实现的相同方法

时间:2013-03-20 09:15:33

标签: javascript jquery

我有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);
    }
}

我已经在html中导入了这个js文件,我在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>

可以说一下流程如何工作。这有效吗?

2 个答案:

答案 0 :(得分:1)

第二个函数将重新声明第一个函数,因此当您调用setReworkCheckFields()时,您将运行第二个函数。

是的,它有效。就像你重写一个变量一样。

请记住,如果您在代码中再次声明此函数,它还将重新声明此定义。在某些情况下,它是有用的行为,但你必须通过重新声明js函数来充实。

答案 1 :(得分:1)

否 - 流程是在js范围内只定义了最后一个函数,因为它覆盖任何具有相似名称的js代码。

在javascript中没有像Java或其他语言中那样的函数重载。 您可以将代码包装到不同的名称空间:

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

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

然后你可以调用MyFirstNameSpace.setReworkCheckFields()或MySecondNameSpace.setReworkCheckFields();

一般来说,覆盖javascript全局范围并不是一个好习惯,因为你不知道你的项目将包含哪些其他js代码,这将会搞乱你自己的代码。