2013-10-13 92 views
0

我在使用初始化函数时无法通过新对象传递参数。考虑下面的例子,我希望能够创建一个返回数组的对象。对象Ex1做得很好:无法通过JavaScript中的初始化函数传递参数

Ex1 = function() { 

    myVar = []; 
    myVar = Array.apply(myVar, arguments); 
    return myVar; 

}; 

ex1 = new Ex1('red', 'green', 'blue'); 
console.log(ex1); 
/* ["red", "green", "blue"] */ 

但是,我想给我们一个初始化程序来保持我的代码清洁。对象练习2显示了我意想不到的结果:

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

你需要学习使用局部变量... – Bergi

+0

一个非常有用的评论... – McShaman

回答

1

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

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将把它在全球范围内。

+0

啊我看到了。通过将参数对象作为参数传递,它将被包装在另一个参数对象中。谢谢...你的文章和良好的夜间睡眠让我明白了。 :) – McShaman