有没有办法将二维数组应用到对象?javascript:应用二维数组
像这样:
var myArray = [[0,1],[2,3]];
someObject.apply(null,myArray);
它似乎只适用于第一内阵列: -/
这是为什么?
有没有办法将二维数组应用到对象?javascript:应用二维数组
像这样:
var myArray = [[0,1],[2,3]];
someObject.apply(null,myArray);
它似乎只适用于第一内阵列: -/
这是为什么?
好了,因为你的问题是如此无信息我会承担很多东西。首先,我将假设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);
明白了:-)谢谢 – 2012-03-10 18:01:10
+1提醒呼叫 – 2012-03-10 18:35:32
var myArray = [[0,1],[2,3]];
someObject.apply(null,[myArray]);
这并没有什么意义,因为'myArray'已经是一个数组了。此外,OP想要传递内部数组作为参数,而不是外部数组。 – 2012-03-10 17:40:50
据the docs,apply
需要的参数数组并将它们传递给你的函数。所以,你需要放置myArray
将被解压到形成参数someObject
内部数组:
var myArray = [[0, 1],[2, 3]];
someObject.apply(null, [myArray]);
在您发布的代码,功能someObject
正在接受两个参数:[0, 1]
和[2, 3]
。这是合法的,因为JavaScript允许使用不同于形式参数数量的参数来调用函数。但是因为多于参数而不是形式参数,所以第二个参数([2, 3]
)丢失,您只能看到第一个参数([0, 1]
)。
谢谢队友!像charme一样工作 – 2012-03-10 17:37:15
JavaScript不会__输出任何参数。你想说的是,函数'someObject'只有一个命名参数,因此只能访问'[0,1]'。那是错的。无论函数原型如何,您都可以在函数中使用自由变量'arguments'来访问传递给函数的所有值。 – 2012-03-10 17:39:12
它已经是一个数组,不需要将它打包在另一个数组中。 – 2012-03-10 17:39:14
你的代码工作..
跟你擦肩而过两个参数的someObject功能的代码,[0,1]和[2,3]
根据这一拨弄这正是发生了什么。 http://jsfiddle.net/BgVxQ/
编辑:如果你有一个未知数量的参数,使用参数变量可以在函数内部得到他们抓住。如果您拥有的参数固定数量,那么它往往更容易宣布他们
function someObject(parameter1, parameter2){
//Do stuff
}
这样,你不需要从参数手动提取它们
'apply'方法是在函数的原型上定义的。不是对象。你想达到什么目的? – 2012-03-10 17:31:21