2012-03-10 78 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 
} 

這樣,你不需要從參數手動提取它們