2

我需要用不同的处理方式声明一个函数 2 次,让我更多地解释一下覆盖:

function test(var){

    //treatments
}

function test(var){

   alert("something" +var);

}

这是HTML代码:

<select name="choices" onchange="test(this)">

    <option value="1">test1</option>
    <option value="2">test2</option>

</select>

我怎样才能使它们同时工作而不使所有功能都集中在一个功能中?

4

3 回答 3

7

javascript 中没有方法/函数覆盖之类的东西。最后定义的函数优先。您可以将逻辑拆分为不同的功能,但您需要某种主要功能来决定使用哪个功能。

Javascript 确实有switch语句,所以这可能很适合您的问题。它会比一个大的 if/else 块更整洁一些。像下面这样的东西可能会起作用。

function test(el){
  switch(el.value){
  case 1:
    alert('option 1 selected');
    break;
  case 2:
    alert('Option 2 selected');
    break;
  default:
    alert('Another option was selected');
  }
}
于 2013-02-11T22:03:25.527 回答
1

想象一下您是 java 脚本运行时...您将如何检测这种歧义?答案是否定的。您不能在同一范围内定义具有相同签名的函数。

但我的建议是使用某种“命名空间”:

var yourNamespace1 = {

    test: function(var) {
        //treatments
    }
};

var yourNamespace2 = {

    test: function(var) {
        alert("something" +var);
    }
};

它是简单的 JS 对象,为关键“测试”定义了函数

yourNamespace1.test(...)并通过and访问功能yourNamespace2.test(...)

于 2013-02-11T22:12:07.980 回答
0

您希望根据下拉列表中的选择具有不同的行为。这是一种方法:

<select name="choices" onchange="test(this)">

    <option value="1">test1</option>
    <option value="2">test2</option>

</select>

function test(el)
{
   var num = el.options[el.selectedIndex].value;
   if (num == 1)
   {
       // case 1
   }
   else if (num == 2)
   {
       // case 2
   }
}
于 2013-02-11T22:05:16.763 回答