JavaScript的具有不同的实现同样的方法

问题描述:

我有JS文件(rework.js)与功能下面JavaScript的具有不同的实现同样的方法

/** 
* 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,我已经如下加入相同的方法用不同的implementaiton在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> 

可以有一个如何流量将工作。这有效写吗?

+0

我可能会误解,但我相信第二个函数会覆盖rework.js中的一个 – DVM 2013-03-20 09:23:42

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

在javascript中,没有像Java或其他语言那样的函数重载。 你可以尽管包装你的代码,以不同的命名空间:

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

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

,那么你可以调用MyFirstNameSpace.setReworkCheckFields()或MySecondNameSpace.setReworkCheckFields();

一般来说,重写javascript全局作用域并不是一个好习惯,因为你不知道你的项目将包含哪些其他js代码,并且这会混淆你自己的代码。

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

是的,它的有效性。它就像你重写一个变量。请记住,如果您在代码中再次声明此函数,它也将重新声明此定义。这在某些情况下是有用的行为,但是必须通过重新声明js函数进行carrefull。