实现 JavaScript 的方法重载效果


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 方法对参数要求比较严格时,就可以用这样的方式来编写代码。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值