无法通过javascript中的初始化函数传递参数

时间:2013-10-13 05:34:26

标签: javascript arrays arguments

使用初始化函数时,我无法通过新对象传递参数。请考虑以下示例,我希望能够创建一个返回数组的对象。对象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"
   }] */

从日志中可以看出结果不是一个干净的数组。

在使用初始化函数并向其传递参数时,如何在创建新对象时返回数组?

1 个答案:

答案 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的变量会把它放在全局范围内。