使用指定构造器和参数列表构造实例

给定构造函数和参数列表,求构造实例

/**
 * Note: This function uses window.eval,
 * which means the function is not available in strict mode
 */
function newInstance(constrcutor,args){
	var length=args.length;
	var cacheKey="$"+length;
	var f=newInstance[cacheKey];
	if(!f){
		var values=new Array(length);
		for(var i=0;i<length;i++){values[i]="arguments["+i+"]";}
		f=eval("(function(){return new this("+values.join(",")+");})");
		newInstance[cacheKey]=f;
	}
	return f.apply(constrcutor,args);
}
/**
 * @example
 */
var values=[2015,4,14,9,17,4,5];
var date=newInstance(Date,values);//same as new Date(2015,4,14,9,17,4,5);

/**
 * @example
 */
function Point(x,y){
	this.x=x;
	this.y=y;
}
var x_y=[0,0];
var point=newInstance(Point,x_y);//same as new Point(0,0);

此功能的应用场景不广,但也算填补了JavaScript应用层的一个空白

时间: 2024-10-07 22:48:35

使用指定构造器和参数列表构造实例的相关文章

C++11 —— 获取 tuple 参数列表中指定数据类型的索引位置

1. 问题背景 ??在 C++11 的标准中,我们可以通过 std::get< Index >(tuple) (以常量整数值为索引号)操作 tuple 中的参数,而到了 C++14 之后的标准,新增了 std::get< Type >(tuple) (以数据类型为索引)的方式操作 tuple 中的参数.那么,若只是在 C++11 标准中,是否有办法使用 以数据类型为索引 的方式操作 tuple 中的参数呢? 2. 解决办法 ??解决上面所提到的问题,其本质上,就是要解决 如何获取

Scala可变参数列表,命名参数和参数缺省

重复参数 Scala在定义函数时允许指定最后一个参数可以重复(变长参数),从而允许函数调用者使用变长参数列表来调用该函数,Scala中使用“*”来指明该参数为重复参数.例如: scala> def echo (args: String *) = | for (arg <- args) println(arg) echo: (args: String*)Unit scala> echo() scala> echo ("One") One scala> ech

arm上的参数列表传递的分析(以android为例)

对于pc上的可变参数列表,比较容易理解:参数全部存储在栈上.所以:va_list p定义一个指针,va_start(p, arg_a)获取参数列表地址,该地址就是va_start第二个参数对应数据之后的地址,,在栈上表现为:arg_a+sizeof(arg_a). 此后根据参数类型,使用va_arg依次从指定的参数列表地址取数据. 但时对于arm上,一个会使用寄存器传递参数的平台,又回怎样处理的呢? 通过写一个简单的示例程序: int test(int a, ...){ va_list p; v

【转】C++可变参数列表处理宏va_list、va_start、va_end的使用

VA_LIST是在C语言中解决变参问题的一组宏他有这么几个成员: 1)va_list型变量: #ifdef     _M_ALPHA typedef    struct{ char* a0; /*pointertofirsthomedintegerargument*/ int offset; /*byteoffsetofnextparameter*/ }va_list; #else typedef    char* va_list;#endif 2)_INTSIZEOF宏,获取类型占用的空间长度

MFC CFileDialog派生类在编译过程出现“error 没有与参数列表匹配的构造函数......”的问题

CFileDialog派生类在编译过程出现"error 没有与参数列表匹配的构造函数实例参数类型为(int,const char[4],const char[6],int,const char[36],int)  .的问题 解决办法 右击项目---属性----配置属性-----常规-----字符集  选择"使用多字节字符集"即可~~~~撒花~~

Java 可变参数列表

1.可变参数列表的简单实现 当调用方法时,方法的参数个数或类型未知时,称其为可变参数列表.在以前的Java代码中,可以使用Object数组来实现这样的功能.因为,所有的类都是直接或间接继承于Object类. VarArgs.java package sample; class A1{} public class VarArgs { static void printArray(Object[] args){ for(Object obj:args) System.out.print(obj+"

c语言中对可变参数列表的简单理解

函数原型中一般情况下参数的数目是固定的,但是如果想在不同的时候接收不定数目的参数时该怎么办呢?c语言提供了可变参数列表来实现. 可变参数列表是通过宏来实现的,这些宏定义在stdarg.h的头文件中.头文件中声明了一个va_list类型和va_start.va_arg.va_end三个宏.我们使用可变参数列表的时候需要声明一个va_list类型的变量配合这三个宏使用. va_start(va_list变量名,省略号前面最后一个有名字的参数):在提取可变参数前必须调用这个宏实现初始化. va_arg

【C语言】printf函数的简单实现(可变参数列表)

stdarg宏: 可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件中,它是标准库的一部分.这个头文件声明一个类型va_list和三个宏va_start.va_arg和va_end.我们可以声明一个类型为va_list的变量,与这几个宏配合使用,访问参数. 声明一个va_list类型的变量arg,它用于访问参数列表的未确定部分.这个变量是调用va_start来初始化的.它的第一个参数是va_list的变量名,第2个参数是省略号前最后一个有名字的参数.初始化过程把var_arg变量设

Chapter5_初始化与清理_数组初始化与可变参数列表

一.数组初始化 数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.编译器是不允许指定数组的长度的,当使用语句int[] a时,拥有的只是一个符号名,即一个数组的引用,并不拥有这个数组的存储空间.要获取数组的存储空间,必须要写初始化表达式,最朴素的表达式类型如下 1 int[] a = {1,2,3}; 如果在编写程序时,不能确定数组的长度,可以使用如下方式,直接用new在数组里创建元素 1 int[] a = new int[3]; 当创建对象数组时,数组中的元素仅仅