0

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

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

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

4

1 回答 1

1

这个问题不难理解。在函数中,arguments是一个类似数组的对象,其中包含传入的所有参数。在第二个示例中,您将数组作为参数传递给 init 函数,因此argumentsinit 函数是一个二维数组。

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会将其置于全局范围内。

于 2013-10-13T10:07:27.653 回答