JS function的参数问题
类似方法重载
var f1 = function(p1,p2,p3){
switch(arguments.length){
case 0:
alert("无参版本的f1")
break;
case 1:
alert("1个参数版本的f1:" + p1)
break;
case 2:
alert("2个参数版本的f1:" + p1 + "," + p2)
break;
case 3:
alert("3个参数版本的f1:" + p1 + "," + p2 + "," + p3)
break;
default:
alert("不支持多于3个参数的调用!");
break;
}
}
f1();
f1("1");
f1("a",100);
f1("1","2","3");
f1("1","2","3","4")
2.函数中可以通过arguments对象来获取函数的全部参数,也就是说可以用arguments进行参数个数检测
var fnMustOneParam = function(p){
//检测有没有参数传入
if (typeof p=="undefined"){
alert("fnMustOneParam必须要有参数传入,才能调用(1)!");
return ;
}
//也可以写成这样
if (arguments.length==0){
alert("fnMustOneParam必须要有参数传入,才能调用(2)!");
return;
}
//检测参数个数
if (arguments.length!=0){
alert("fnMustOneParam只能传入一个参数调用!");
return;
}
//to do...
}
function show()
{
var largest=Max(10,20,30,1,10000,88,56,123);
alert(largest);//display:10000
}
function Max(m)
{
var re=0;
for(var i=0;i<arguments.length;i++)
{
if(arguments[i]>re)
{
re=arguments[i];
}
}
return re;
}
Arguments对象是一个类似于数组的对象,可以按照参数的数目而不是名称来获取全部参数,并且arguments也具有length属性,可以用来获取获取实际参数的个数.
arguments虽然具有一些数组的特性,但是他不是数组.实际上arguments[]是和实际参数是引用同一变量的两种方法:
function ChangeParamValue()
{
ChangParamValueDo("第一个参数","第二个参数");
}
function ChangParamValueDo(a,b)
{
alert("改变前:a:"+a+",b:"+b);// display:改变前:a:第一个参数,b:第二个参数
arguments[0]="arguments0";
arguments[1]="arguments1";
alert("用arguments改变后:a:"+a+",b:"+b); // display:用arguments改变后:a:arguments0,b:arguments0
}
arguments有一个callee属性,用没过来引用当前正在执行的函数
function f(x)
{
if(x<=1) return x;
return x*arguments.callee(x-1);
}
3。把对象属性用作参数:这样可以不必去记参数的顺序,用对象的属性名来传参
function ArrayCopy(name,age,grade,sex,height,weiht)
{
alert("name:"+name+" age:"+age+" grade:"+grade+" sex:"+sex+" height:"+height+" weiht:"+weiht);
}
function EasyCopy(args)
{
ArrayCopy(args.name||"",
args.age||0,
args.grade||"one",
args.sex||"可选",
args.height||100,
args.weight||100 )
}
function show()
{
EasyCopy({name:'lily',age:'13',grade:'three'});
EasyCopy({name:'mark',height:'180',weight:180});
}
4、js引擎同样不会检测参数的类型,如果您希望对参数的基本类型做些限制,可以利用typeof 来进行参数基本类型检测
var fnString = function(s){
if (arguments.length!=1){
alert("参数个数不匹配!");
return ;
}
if (typeof s != "string"){
alert("只能传入string类型的参数!");
return ;
}
}
5、自定义类的参数类型检测,如果是自定义类的参数,如果用typeof运算符号,只能得到object的类型检测结果,这时可利用instanceof运算符号来解决
function Person(name,age){
this.name = name;
this.age = age;
}
function fnPerson(p){
if (arguments.length==1 && p instanceof Person){
//if (arguments.length==1 && p.constructor == Person) //也可以写成这样
alert("fnPerson调用成功,p.name=" + p.name + ",p.age=" + p.age);
}
else{
alert("必须传入一个Person类型的参数才能调用!");
}
}
JS function的参数问题的更多相关文章
- 给js function的参数设置默认值
C# 中 function func(a,b=1){//具体方法} js 中 function func(a,b){ a= arguments[0] || 10; b= arguments[1] || ...
- 【转】javascript浏览器参数的操作,js获取浏览器参数
原文地址:http://www.haorooms.com/post/js_url_canshu html5修改浏览器地址:http://www.cnblogs.com/JiangXiaoTian/ar ...
- js 读取 地址栏参数 转
用JS获取地址栏参数的方法(超级简单) 方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) { var re ...
- Js替换地址栏参数
开了博客竟然有9个月没在来写过了.真是惭愧.今天需要用到一个用js替换地址栏参数的的功能.就自己用JS自己写了一个简单的函数.贴出来仅供大家参考.代码都写了注释.如下: /* js替换URL参数值,无 ...
- js获取url参数的方法
js获取url参数的方法有很多. 1.正则分析 function getQueryString(name) { var reg = new RegExp("(^|&)" + ...
- JS 不定函数参数argument的用法
本篇文章只要是对js的隐含参数(arguments,callee,caller)使用方法进行了介绍. arguments arguments 该对象代表正在执行的函数和调用它的函数的参数. [func ...
- 【功能代码】---4用JS获取地址栏参数方法
用JS获取地址栏参数方法 // 方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) { var reg = new Reg ...
- get方法与post方法的区别与js获取url参数的方式
1.get方法与post方法的区别: 区别一:get重点在从服务器上获取资源,post重点在向服务器发送数据:区别二:get传输数据是通过URL请求,以field(字段)= value的形式,置于UR ...
- (转)用JS获取地址栏参数的方法(超级简单)
转自http://www.cnblogs.com/fishtreeyu/archive/2011/02/27/1966178.html 用JS获取地址栏参数的方法(超级简单) 方法一:采用正则表达式获 ...
随机推荐
- mysql如何设置密码
1.用root 进入mysql后mysql>set password =password('你的密码');mysql>flush privileges;2.使用GRANT语句 mysql& ...
- TCP/IP详解学习笔记(5)-- ICMP:internet 控制报文协议
1.概述 ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制 ...
- Android Studio在线安装Android SDK注意事项
由于使用的Android studio自带了sdk23,然而其它版本的sdk并没有安装:这些天由于需要用到低版本的sdk,因而使用Android SDK Manager进行相应的更新.开始的时候老是无 ...
- Android数据存储之SQLite的操作
Android作为一个应用在移动设备上的操作系统,自然也就少不了数据的存储.然而SQLite作为一个轻型的关系型数据库,基于其轻量.跨平台.多语言接口及安全性等诸多因数考虑,因而Android较大的数 ...
- Android 启动画面
如果你的程序初始化时间过长,那么在初始化之前,程序会现实一个空白的activity页,十分难看. 添加一个启动画面的方法就是为响应的activity加入自定义的Theme,并在theme中设定 and ...
- iOS7 status bar 样式问题
在ios7中,有如下status bar 样式 typedef NS_ENUM(NSInteger, UIStatusBarStyle) { UIStatusBarStyleDefault = , / ...
- 关于php中数据访问的几点补充
前几篇文章说了,parent.self.static关键字的使用,parent可以访问父类的静态方法和静态变量,self和static可以访问本类的静态成员等等,但实际上他们还有其他作用,来看一下: ...
- Intellj IDEA快捷键
Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码 ...
- Maven简介
转载地址:http://www.cnblogs.com/itech/archive/2011/11/01/2231837.html Ant是软件构建工具,Maven的定位是软件项目管理和理解工具.Ma ...
- 虚析构函数(√)、纯虚析构函数(√)、虚构造函数(X)
from:http://blog.csdn.net/fisher_jiang/article/details/2477577 一. 虚析构函数 我们知道,为了能够正确的调用对象的析构函数,一般要求具有 ...