不想写太多的方法名,网上百度的:
JavaScript 语言的方法声明中,不能明确指定参数的类型和个数,所以不能实现方法的重载,但是我们可以用其他的方法来实现重载的效果。
在 JavaScript 的方法内,有个叫做 arguments 的变量数组,它是只读的,所有实际传入的参数变量都
放在了里面,通过它,我们可以对传入的参数进行类型检查,从而实现重载的效果。
判断一个变量的类型有两种方法
用 typeof 语句:
function check(){
if(typeof arguments[0] == 'string')
alert('你传入的参数是个字符串');
else if(typeof arguments[0] == 'number')
alert('你传入的参数是个数字');
}
用所有 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
一个新的函数重载模式。代码如下
var FunctionH = {
map: function (arr, callback, pThis) {
var len = arr.length;
var rlt = new Array(len);
for (var i = 0; i < len; i++) {
if (i in arr)
rlt[i] = callback.call(pThis, arr[i], i, arr);
}
return rlt;
},
overload: function (dispatcher, func_maps) {
if (!(dispatcher instanceof Function)) {
func_maps = dispatcher;
dispatcher = function (args) {
var ret = [];
return FunctionH.map(args, function (o) { return typeof o }).join();
}
}
return function () {
var key = dispatcher([].slice.apply(arguments));
for (var i in func_maps) {
var pattern = new RegExp("^" + i.replace("*", "[^,]*").replace("...", ".*") + "$");
if (pattern.test(key)) {
return func_maps[i].apply(this, arguments);
}
}
}
}
}
应用:
TINY.page = function () {
var isNull = function () {
if (document.getElementById("txtPEnterprise_NO").value == "") {
return true;
}
else
return false;
};
return {
select: function () {
if (isNull()) {
top.Dialog.alert("请您输入追溯码!");
return false;
}
else {
return true;
}
},
confirm: FunctionH.overload({
'string': function () {
if (isNull()) {
top.Dialog.alert("请您输入追溯码!");
return false;
}
if (!confirm(arguments[0])) {
return false;
}
return true;
},
'string,object':function(){
// arguments[0];为字符串值
// arguments[1];为object值
},
'object': function () {
if (isNull()) {
top.Dialog.alert("请您输入追溯码!");
return false;
}
var obj = arguments[0];
if (typeof obj == "object") {
var tooltip = obj.getAttribute("title")
if (tooltip == "lock") {
if (!confirm("您确定锁定该批次产品吗?")) {
return false;
}
return true;
}
else if (tooltip == "unlock") {
if (!confirm("您确定解锁该批次产品吗?")) {
return false;
}
return true;
}
}
}
})
}
} ();
调用:
<asp:Button ID="BtnLock" Enabled="false" runat="server" Text="锁 定"
CssClass="blueButtonCss1" onclick="BtnLock_Click" ToolTip="lock" OnClientClick="return TINY.page.confirm(this);"/>
<asp:Button ID="BtnDestory" Enabled="false" ToolTip="destory" runat="server"
Text="销 毁" CssClass="blueButtonCss1" onclick="BtnDestory_Click" OnClientClick="return TINY.page.confirm('确定销毁?');"/>
TINY.page.confirm('确定销毁?',this);
转载自:
http://www.cnblogs.com/bluedream2009/archive/2011/01/05/1925963.html