有沒有辦法將二維數組應用到對象?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