您的位置:首页 > Web前端 > JavaScript

js实现方法重载

2017-11-27 09:17 281 查看
高级编程语言中基本上有会用到方法的重载比如如下代码

public decimal add(decimal d1, decimal d2)
{
return d1 + d2;
}

public decimal add(string d1, string d2)
{
decimal res = 0;
try {
res= decimal.Parse(d1) + decimal.Parse(d2);
} catch (Exception e) {
throw  new Exception("字符串转化decimal类型失败" + e.Message);
}
return res;
}


但是如果在js中这样写就会被覆盖,因为函数定义时的参数个数和函数调用时的参数个数没有任何关系

在函数中可以用f.arguments[0]和f.arguments[1]得到调用时传入的第一和第二个参数,比如无想把时间字符

串格式化,如果按照上面那种写法应该是如下代码

String.prototype.getDate = function () {
var res = /\d{13}/.exec(this);
if (res != null)
var date = new Date(parseInt(res));
else
var date = new Date(this)
return date.format("yyyy-MM-dd HH:mm:ss");
}

String.prototype.getDate = function (format) {
var res = /\d{13}/.exec(this);
if (res != null)
var date = new Date(parseInt(res));
else
var date = new Date(this)
return date.format(format);
}


可是你在调用的时候会发现完全无法重载,所以我们可以借助arguments对象来变相的实现方法重载,

修改后代码如下:

String.prototype.getDate = function () {
var res = /\d{13}/.exec(this);
if (res != null)
var date = new Date(parseInt(res));
else
var date = new Date(this)
if (arguments.length == 1) {//判断参数个数
return date.format(arguments[0]);//arguments[0]获取第一个参数
}
return date.format("yyyy-MM-dd HH:mm:ss");
}


这时候再试下就可以了:

str.getDate()//返回yyyy-MM-dd HH:mm:ss格式

str.getDate("yyyy-MM-dd")//返回yyyy-MM-dd格式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息