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>
可以有一个如何流量将工作。这有效写吗?
答
否 - 流程是只有最后一个函数在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。
我可能会误解,但我相信第二个函数会覆盖rework.js中的一个 – DVM 2013-03-20 09:23:42