2012-03-10 77 views
-2

有没有办法将二维数组应用到对象?javascript:应用二维数组

像这样:

var myArray = [[0,1],[2,3]]; 
someObject.apply(null,myArray); 

它似乎只适用于第一内阵列: -/

这是为什么?

+0

'apply'方法是在函数的原型上定义的。不是对象。你想达到什么目的? – 2012-03-10 17:31:21

回答

1

好了,因为你的问题是如此无信息我会承担很多东西。首先,我将假设someObject是一个函数。接下来,我将假设它只有一个正式参数,如@Adam指出的那样。因此,这是我想你的代码如下所示:

function someObject(a) { 
    alert(a);     // were you expecting [[0,1],[2,3]]? 
} 

var myArray = [[0,1],[2,3]]; 
someObject.apply(null,myArray); 

这就是我想你想代替:

function someObject() { 
    alert(arguments);   // now it alerts [[0,1],[2,3]] 
} 

var myArray = [[0,1],[2,3]]; 
someObject.apply(null,myArray); 

记住,当你apply参数的函数传递给它的参数作为阵列。这有点像调用函数,如下所示:

function someObject() { 
    alert(arguments); 
} 

var myArray = [[0,1],[2,3]]; 
someObject(myArray[0], myArray[1]); 

当然,它也为函数分配一个自定义的这个指针。

编辑:回顾你的代码我想你可能打算利用call而不是apply。方法call允许您将参数作为单独的参数传递给函数,而不是参数数组。所以你的代码看起来如下:

function someObject(a, b) { 
    alert(a);     // now a is [[0,1],[2,3]] 
    alert(b);     // b is 5 and so on 
} 

var myArray = [[0,1],[2,3]]; 
someObject.call(null,myArray,5); 
+0

明白了:-)谢谢 – 2012-03-10 18:01:10

+0

+1提醒呼叫 – 2012-03-10 18:35:32

-2
var myArray = [[0,1],[2,3]]; 
someObject.apply(null,[myArray]); 
+1

这并没有什么意义,因为'myArray'已经是一个数组了。此外,OP想要传递内部数组作为参数,而不是外部数组。 – 2012-03-10 17:40:50

-2

the docsapply需要的参数数组并将它们传递给你的函数。所以,你需要放置myArray将被解压到形成参数someObject内部数组:

var myArray = [[0, 1],[2, 3]]; 
someObject.apply(null, [myArray]); 

在您发布的代码,功能someObject正在接受两个参数:[0, 1][2, 3]。这是合法的,因为JavaScript允许使用不同于形式参数数量的参数来调用函数。但是因为多于参数而不是形式参数,所以第二个参数([2, 3])丢失,您只能看到第一个参数([0, 1])。

+0

谢谢队友!像charme一样工作 – 2012-03-10 17:37:15

+0

JavaScript不会__输出任何参数。你想说的是,函数'someObject'只有一个命名参数,因此只能访问'[0,1]'。那是错的。无论函数原型如何,您都可以在函数中使用自由变量'arguments'来访问传递给函数的所有值。 – 2012-03-10 17:39:12

+1

它已经是一个数组,不需要将它打包在另一个数组中。 – 2012-03-10 17:39:14

1

你的代码工作..

跟你擦肩而过两个参数的someObject功能的代码,[0,1]和[2,3]

根据这一拨弄这正是发生了什么。 http://jsfiddle.net/BgVxQ/

编辑:如果你有一个未知数量的参数,使用参数变量可以在函数内部得到他们抓住。如果您拥有的参数固定数量,那么它往往更容易宣布他们

function someObject(parameter1, parameter2){ 
    //Do stuff 
} 

这样,你不需要从参数手动提取它们