使用初始化函数时,我无法通过新对象传递参数。请考虑以下示例,我希望能够创建一个返回数组的对象。对象Ex1做得很好:
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"
}] */
从日志中可以看出结果不是一个干净的数组。
在使用初始化函数并向其传递参数时,如何在创建新对象时返回数组?
答案 0 :(得分:1)
这个问题不难理解。在函数中,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
的变量会把它放在全局范围内。