2013-03-20 46 views
1

我有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

回答

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代碼,並且這會混淆你自己的代碼。

1

第二個函數將重新聲明第一個函數,所以當您調用setReworkCheckFields()時,您將運行第二個函數。

是的,它的有效性。它就像你重寫一個變量。請記住,如果您在代碼中再次聲明此函數,它也將重新聲明此定義。這在某些情況下是有用的行爲,但是必須通過重新聲明js函數進行carrefull。

相關問題