javascript中通过初始化器函数传递参数时出现问题
在使用初始化器函数时,我在通过新对象传递参数时遇到问题。考虑下面的例子,我希望能够创建一个返回数组的对象。对象Ex1可以很好地执行此操作:javascript中通过初始化器函数传递参数时出现问题,javascript,arrays,arguments,Javascript,Arrays,Arguments,在使用初始化器函数时,我在通过新对象传递参数时遇到问题。考虑下面的例子,我希望能够创建一个返回数组的对象。对象Ex1可以很好地执行此操作: Ex1 = function() { myVar = []; myVar = Array.apply( myVar, arguments ); return myVar; }; ex1 = new Ex1( 'red', 'green', 'blue' ); console.log( ex1); /* ["red", "gree
Ex1 = function() {
myVar = [];
myVar = Array.apply( myVar, arguments );
return myVar;
};
ex1 = new Ex1( 'red', 'green', 'blue' );
console.log( ex1);
/* ["red", "green", "blue"] */
然而,我想给我们一个初始化器来保持我的代码干净。对象Ex2显示我的意外结果:
Ex2 = function() {
init = function() {
myVar = [];
myVar = Array.apply( myVar, arguments );
return myVar;
};
return init( arguments );
};
ex2 = new Ex2( 'red', 'green', 'blue' );
console.log( ex2 );
/* [[object Arguments] {
0: "red",
1: "green",
2: "blue"
}] */
从日志中可以看出,结果不是一个干净的数组
使用初始化器函数创建新对象并向其传递参数时,如何返回数组?这个问题不难理解。在函数中,
arguments
是一个类似数组的对象,它包含传入的所有参数。在第二个示例中,您将数组作为参数传递给init函数,因此init函数中的arguments
是一个2D数组
Ex2 = function() {
init = function() {
myVar = [];
myVar = Array.apply( myVar, arguments );//arguments: [["red", "green", "blue"]]
return myVar;
};
return init( arguments );//arguments: ["red", "green", "blue"]
};
您可以使用一个参数,例如:
Ex2 = function() {
var init = function(argu) {
return Array.apply( 0, argu );//argu: ["red", "green", "blue"]
};
return init( arguments );
};
ex2 = new Ex2( 'red', 'green', 'blue' );
console.log( ex2 );//["red", "green", "blue"]
另一件事是声明一个变量而不使用
var
将把它置于全局范围。你需要学习使用局部变量…一个非常有用的注释…啊,我现在明白了。通过将arguments对象作为参数传递,它被包装在另一个arguments对象中。谢谢你的帖子和良好的睡眠帮助我理解了。:)