JavaScript 的方法重载效果

  在 JavaScript 的方法内,有个叫做 arguments 的变量数组,它是只读的,所有实际传入的参数变量都

  放在了里面,通过它,我们可以对传入的参数进行类型检查,从而实现重载的效果。

  判断一个变量的类型有两种方法。

  1,用 typeof 语句:

  

复制代码 代码如下:

  function check(){

  if(typeof arguments[0] == 'string')

  alert('你传入的参数是个字符串');

  else if(typeof arguments[0] == 'number')

  alert('你传入的参数是个数字');

  }

  2,用所有 JavaScript 变量都带有的一个属性 constructor,这个属性指向用来构造该变量的构造函数:

  

复制代码 代码如下:

  function check(){

  if(arguments[0].constructor == String)

  alert('你传入的参数是个字符串');

  else if(arguments[0].constructor == Number)

  alert('你传入的参数是个数字');

  }

  对照表:

  typeof constructor

  ---------------------------

  string String

  number Number

  object Object

  function Function

  boolean Boolean

  object Array

  object User

  通过这个对照表可以看出用 typeof 不能准确的判断出具体的类型,所以我们用 constructor 来进行判

  断。

  首先我们定义一个用来判断参数类型和个数的方法

  

复制代码 代码如下:

  function checkArgs(types,args){

  // 检查参数个数

  if(types.length != args.length){

  return false;

  }

  // 检查参数类型

  for(var i=0; i<args.length; i++){

  if(args[i].constructor != types[i]){

  return false;

  }

  }

  return true;

  }

  我们定义一个方法对上面的方法进行应用

  

复制代码 代码如下:

  function show(){

  // 处理参数是一个字符串的调用

  if(checkArgs([String],arguments)){

  alert(arguments[0]);

  }

  // 处理参数是一个字符串和一个数字的调用

  else if(checkArgs([String,Number],arguments)){

  var s = '';

  for(var i=0; i<arguments[1]; i++){

  s+=arguments[0];

  }

  alert(s);

  // 参数不符合要求时,给予提示

  }else{

  alert('不支持的参数');

  }

  }

  当我们定义的 JavaScript 方法对参数要求比较严格时,就可以用这样的方式来编写代码。