语言特性-函数重载与类型检查
2013-07-15 16:09
253 查看
函数重载要依赖于两点:判断传入参数数量的能力和判断传入参数类型的能力。
JS函数的参数列表,参数仅在函数内有效。参数列表是一个伪数组,可以访问其中的元素,具有.length属性,但是不能push()。
<script
language="javascript"
type="text/javascript">
function sendMessage(msg, obj) {
if (arguments.length == 2) {
obj.handleMsg(msg); //参数为函数的第一个参数
}
else {
alert(msg);
}
}
sendMessage("hello,javascript!");
//输出hello,javascript!
//将我们写好的对象传入,用handleMsg方法调
sendMessage("hello", {
handleMsg: function(msg) {
//此处方法必须和obj.handleMsg相同
alert("print:
" + msg);
}
}
);
//--------------------------------------
//一个接受任意数量参数,并将参数转化为数组的函数
function makeArray() {
var arr = [];
for (var i = 0; i < arguments.length; i++) {
arr.push(arguments[i]);
}
return arr;
}
//将makeArray函数实例化,并输出数组的每个值
function printArray() {
var array = makeArray("asd",
"42", 90, "bj", 900);
for (var i = 0; i < array.length; i++) {
alert(array[i]);
}
}
printArray();
//------------------------------------
//在函数中判断参数类型的时候,如果没有参数,那么其类型必定为undefined.
function displayError(msg) {
if (typeof msg == undefined) {
msg = "undefined";
}
msg = typeof msg;
alert(msg);
}
displayError("rxm");
//------------------------------------
//判断类型的时候有两张方法,
//一:typeof eg:typeof msg[当变量不是object或array时,这种方法很完美]
//二:引用所有JS对象都拥有的一个属性,这个属性引用的是构造该对象时候的函数[构造函数]
var msg =
"rxm,ru,rem";
var arr =
new Array();
if (msg.constructor ==
String) {
arr = msg.split(",");
//如果变量是字符串,将其切成数组
}
//------------------------------------
//用变量类型列表检查参数列表
function strict(types, args) {
if (types.length != args.length) {
throw
"变量参数的个数与函数列表不符!";
}
for (var i = 0; i < args.length; i++) {
if (args[i].constructor != types[i]) {
throw
"参数类型不符要求!";
}
}
}
function book(name, price, content) {
strict([String, Number, Array], arguments);
for (var i = 0; i < content.length; i++) {
alert(content[i]);
}
}
// book("", "", "sd");//抛出异常
book("语文", 90, ["春",
"夏",
"秋", "冬"]);
</script>
JS函数的参数列表,参数仅在函数内有效。参数列表是一个伪数组,可以访问其中的元素,具有.length属性,但是不能push()。
<script
language="javascript"
type="text/javascript">
function sendMessage(msg, obj) {
if (arguments.length == 2) {
obj.handleMsg(msg); //参数为函数的第一个参数
}
else {
alert(msg);
}
}
sendMessage("hello,javascript!");
//输出hello,javascript!
//将我们写好的对象传入,用handleMsg方法调
sendMessage("hello", {
handleMsg: function(msg) {
//此处方法必须和obj.handleMsg相同
alert("print:
" + msg);
}
}
);
//--------------------------------------
//一个接受任意数量参数,并将参数转化为数组的函数
function makeArray() {
var arr = [];
for (var i = 0; i < arguments.length; i++) {
arr.push(arguments[i]);
}
return arr;
}
//将makeArray函数实例化,并输出数组的每个值
function printArray() {
var array = makeArray("asd",
"42", 90, "bj", 900);
for (var i = 0; i < array.length; i++) {
alert(array[i]);
}
}
printArray();
//------------------------------------
//在函数中判断参数类型的时候,如果没有参数,那么其类型必定为undefined.
function displayError(msg) {
if (typeof msg == undefined) {
msg = "undefined";
}
msg = typeof msg;
alert(msg);
}
displayError("rxm");
//------------------------------------
//判断类型的时候有两张方法,
//一:typeof eg:typeof msg[当变量不是object或array时,这种方法很完美]
//二:引用所有JS对象都拥有的一个属性,这个属性引用的是构造该对象时候的函数[构造函数]
var msg =
"rxm,ru,rem";
var arr =
new Array();
if (msg.constructor ==
String) {
arr = msg.split(",");
//如果变量是字符串,将其切成数组
}
//------------------------------------
//用变量类型列表检查参数列表
function strict(types, args) {
if (types.length != args.length) {
throw
"变量参数的个数与函数列表不符!";
}
for (var i = 0; i < args.length; i++) {
if (args[i].constructor != types[i]) {
throw
"参数类型不符要求!";
}
}
}
function book(name, price, content) {
strict([String, Number, Array], arguments);
for (var i = 0; i < content.length; i++) {
alert(content[i]);
}
}
// book("", "", "sd");//抛出异常
book("语文", 90, ["春",
"夏",
"秋", "冬"]);
</script>
相关文章推荐
- 语言特性-函数重载与类型检查
- Javascript学习笔记之函数重载和类型检查
- 面向对象的 Javascript 函数重载和类型检查
- 面向对象的 Javascript 函数重载和类型检查
- JS函数重载和类型检查
- C++语言特性:构造函数,析构函数,虚函数,内联函数,静态成员函数,重载,覆盖,隐藏
- 面向对象的 Javascript 函数重载和类型检查
- 精通JavaScript —— 函数重载和类型检查
- [c++][语言语法]函数模板和模板函数 及参数类型的运行时判断
- Racket 6.11提供了稳定的细化类型和依赖函数特性
- Nullable类型,C#溢出检查,typeof运算符和运算符的重载
- C语言简单宏函数实现C++模板功能(类型本身作为函数参数)
- C++和Java在 子类继承父类时,两者成员函数重写和重载的特性
- 高质量程序设计指南-c/c++语言:笔记之C++函数的高级特性
- Nullable类型,C#溢出检查,typeof运算符和运算符的重载
- C++的运算符重载(运算符重载如何选定重载的函数类型)--思考1
- C语言不进行类型检查 和函数可以不进行前向声明
- 使用php判断浏览器的类型和语言的函数代码
- [易学C#]C#3.0语言新特性之隐式类型
- 检查 string 类型的日期和时间是否合法的函数。