在JavaScript中重载函数

Rup*_*tel 1 javascript jquery overloading

我一直在使用jQuery一年,但我仍然不明白这段代码是如何工作的:

alert($('#elementID').val()); // It gets the value of element

$('#elementID').val('setting Value'); // the same function is setting value
Run Code Online (Sandbox Code Playgroud)

jquery的其他一些功能也是这样的 .html()

我想知道这件事是如何实现的?他们如何重载javascript函数?

Nik*_*vić 8

javascript中没有重载,因此使用可选参数执行此类专长.JavaScript允许您在不指定参数的情况下调用函数.例如:

function val(text)
{
  if (arguments != null && arguments.length > 0) {
    alert("i'm setting value here to " + text);
  } else {
    alert("i'm getting value here");
  }
}

val(); // alerts value getter
val('hi!'); // alerts value setter and the message
Run Code Online (Sandbox Code Playgroud)

编写这个例子是为了指出你在每个函数中得到的参数集合.每个函数都可以将它的参数作为集合获取,并可以相应地执行它的逻辑.但是,显示的示例在现实世界中的编写方式不同:

function val(text)
{
  if (typeof text === "string") {
    alert("i'm setting value here to " + text);
  } else {
    alert("i'm getting value here");
  }
}
Run Code Online (Sandbox Code Playgroud)

您未传递给函数的每个参数都获得undefined(not null)的"值" .这使您可以使用最短的逻辑表达式.您可以在if语句中使用任何值.将被评估为nullundefined将被简单评估为的变量false.

如下面的评论所指出,如果text参数为空,则字符串if (text)将返回false.因此,对于文本参数,请按类型检查参数.

阅读nullundefined区别对你来说是有益的.


Adi*_*Adi 5

它只是通过检查是否使用参数调用函数来完成

function stuff(moreStuff){
   if(typeof moreStuff === "undefined"){
      return originalStuff;
   }else{
      setStuff(moreStuff);
   }
}
Run Code Online (Sandbox Code Playgroud)