`
lee3836
  • 浏览: 68275 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Arguments对象(二)

阅读更多
一个利用arguments实现函数重载机子的例子

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> 利用arguments实现的函数重载机制 </TITLE>
 </HEAD>
 <BODY>
  <SCRIPT LANGUAGE="JavaScript">
  <!--
	function dwn(s)
	{
		document.write(s +"<br/>");
	}
	//$overload用来匹配参数类型和参数值,自动调用符合条件的重载函数
	function $overload(func,argMaps,owner)
	{
		//owner是函数的所有者,即调用对象
		owner = owner || null ;
		var args = [] ;
		for (var i = 0;i < argMaps.length ;i++ )
		{
			//判断argMaps中参访的参数类型声明是否同实际参数的类型相匹配
			if (argMaps[i].type != typeof(argMaps[i].arg) && !(argMaps[i].arg instanceof argMaps[i].type))
			{
				throw new Error("参数类型不匹配");//不匹配抛出异常
			}
			args.push(argMaps[i].arg);
		}
		//用apply实际调用该方法
		return func.apply(owner,args);
	}

function Point(x,y)
{
	this.x = x;
	this.y = y;
}

function Vector(x,y)
{
	//私有方法,简单封装也给argMaps的结构
	function $t(type,arg)
	{
		return {type:type,arg:arg}
	}
	//用向量构造向量
	function vector_vector(v)
	{
		this.x = v.x;
		this.y = v.y ;
	}

	//用点构造向量
	function point_vector(p)
	{
		this.x = p.x ;
		this.y = p.y ;
	}

	//用x、y坐标构造向量
	function number_number_vector(x,y)
	{
		this.x = x ;
		this.y = y ;
	}
	
	//用两个点所构成的线段构造向量
	function point_point_vector(p1,p2)
	{
		this.x = p2.x - p1.x ;
		this.y = p2.y - p1.y ;
	}

	//类型对应表,根据这个表指派正确的函数进行调用
	var funcs = [
		[number_number_vector,[$t('number',x),$t('number',y)]],
		[point_point_vector,[$t(Point,x),$t(Point,y)]],
		[vector_vector,[$t(Vector,x)]],
		[point_vector,[$t(Point,x)]]
	];

	//如果不带参数调用,默认调用Vector(0,0)
	if (arguments.length ==0)
	{
		Vector.call(this,0,0);//call 方法可以用来代替另一个对象调用一个方法
	}

	for (var i = 0;i < funcs.length ;i++ )
	{
		try
		{
			//尝试选择合适的funcs进行调用
			return $overload(funcs[i][0],funcs[i][1],this);
		}
		catch (ex)
		{
		}
	}
	//如果参数类型和上次类表的任何一个都不匹配,则抛出异常
	throw new Error('参数不匹配!');
}
//重载toString()方法,便于显示
Vector.prototype.toString = function(){
	return "[" + this.x + "," + this.y + "]" ;
}

try
{
	var v1 = new Vector(1,2);//用x、y形式构造Vector
	dwn(v1);
	var p1 = new Point(0,3);
	var p2 = new Point(2,4);
	var v2 = new Vector(p1);//用单点形式构造Vector
	var v3 = new Vector(p1,p2);//用两点确定的线段的形式构造Vector
	dwn(v2);
	dwn(v3);
	var v4 =  new Vector("str");//用字符串构造,类型都不匹配,抛出异常
}
catch (ex)
{
	dwn(ex.message);
}

  //-->
  </SCRIPT>
 </BODY>
</HTML>

分享到:
评论

相关推荐

    arguments对象的使用

    4. **arguments对象与形参的关系**:如果函数定义了形参,那么形参变量会自动绑定到`arguments`对象中对应的值。例如,函数`function foo(a, b) { console.log(a, b); }`调用`foo(1, 2)`时,`a`和`b`将分别得到`...

    Arguments对象作用深度研究.pdf

    Arguments对象是JavaScript中一个特殊的数据结构,主要用于在函数内部存储传递给函数的所有参数。无论函数定义了多少个参数,Arguments对象都会包含所有实际传递的参数。这篇深度研究主要探讨了Arguments对象的几个...

    Javascript学习笔记之函数篇(四):arguments 对象

    JavaScript中的arguments对象是一个特殊对象,它代表当前正在执行的函数的参数集合。这个对象可以在函数体内直接使用,无须提前声明参数名即可访问参数。每一个JavaScript函数作用域内都有一个名为arguments的局部...

    js arguments对象应用介绍

    在JavaScript中,所有的函数参数都会被自动存储在arguments对象中,它是一个类数组对象,允许我们在函数内部通过这个对象访问所有传递给函数的参数。 在正式开始之前,先简要回顾一下arguments对象的基本概念。...

    javascript内置对象arguments详解

    虽然arguments对象包含了传递给函数的所有参数,但它并不是一个真正的数组,这在使用时需要特别注意。 首先,我们来探讨arguments对象是什么。它提供了一种方式来访问函数调用时传递给函数的所有参数。这是...

    JavaScript的arguments对象应用示例

    JavaScript中的arguments对象是函数内预定义的一个类数组对象,它包含了传递给函数的所有参数值。尽管在现代JavaScript开发中,ES6引入了更灵活的参数处理方式,如rest参数和默认参数,但在学习和理解JavaScript时,...

    Javascript中的arguments对象

    JavaScript中的arguments对象是一个非常有用的内置对象,它存在于所有函数体内,特别是当函数被调用时。它为函数提供了一种访问所有传递给函数的参数的方法。由于JavaScript本身不支持函数重载的机制,arguments对象...

    深入解析JavaScript中的arguments对象

    在JavaScript编程语言中,`arguments`对象是一个非常特殊且实用的特性,它允许开发者在函数内部访问所有传入的实际参数,而不仅仅限于函数声明时定义的参数。这个对象虽然不是真正的数组,但它具备了一些数组的特性...

    JS:arguments

    ### JavaScript中的`arguments`对象详解 在JavaScript编程中,`arguments`对象是一个非常有用的特性,尤其是在处理函数调用时不确定参数数量的情况下。虽然它不是ECMAScript标准的一部分,但所有主流浏览器都支持这...

    js中arguments对象的深入理解

    本文主要给大家介绍了关于js中arguments对象的相关内容,下面话不多说了,来一起看看详细的介绍吧 一、在函数调用的时候,浏览器每次都会传递进两个隐式参数 函数的上下文对象this 封装实参的对象arguments 二、...

    Javascript中arguments对象详解

    在JavaScript编程中,arguments对象是一个非常有用的概念,尤其是在处理函数参数方面。在许多编程语言中,如PHP,函数参数可以设置默认值,这样当调用函数时,如果缺少参数,就会自动使用预设的默认值。但在...

    JavaScript中如何通过arguments对象实现对象的重载

    `arguments`对象是一个类数组对象,它包含了函数调用时传入的所有实际参数。无论函数定义了多少个形式参数(形参),`arguments`对象总是包含所有传递给该函数的实际参数。例如,以下是一个简单的函数: ```...

    前端开源库-arguments-extended

    "arguments-extended"就是一个这样的开源库,专为处理JavaScript中的`arguments`对象提供了一系列实用方法,旨在增强参数操作的灵活性和便利性。 `arguments`对象在JavaScript中是一个特殊的对象,它在函数内部可用...

    JS函数动态传递参数的方法分析【基于arguments对象】

    js函数体内可以通过arguments对象来接收传递进来的参数,利用这一对象属性可以动态传参。 function box() { return arguments[0]+' | '+arguments[1]; //得到每次参数的值 } alert&#40;box(1,2,3,4,5,6&#41;); //...

    Javascript中arguments对象的详解与使用方法

    ECMAScript中的函数并不介意传递的参数有多少,也不介意是什么类型。由于JavaScript允许函数有不定数目的参数,所以我们需要...这就是arguments对象的由来。这篇文章将详细介绍Javascript中的arguments对象和使用方法。

Global site tag (gtag.js) - Google Analytics