2013-08-05 23 views
0

我遇到了Function.prototype.apply方法的問題。下面是我的測試來源:Javascript:如何使用apply方法傳遞參數數組,然後在被調用函數中訪問它

function callMe(array){ 
    var s = ""; 
    s += array; //<--- I want to access the array's member here, eg. array[0], array[1], ... 
    return s; 
} 
var myArr = ["begin", 1, 2, 3, 4, "end"]; 
console.log(callMe.apply(this, myArr)); 

我要訪問的參數,但不希望在函數指定每個PARAM呼籲爲callMe.call(this, arg1, arg2, arg3)。我要的是callMe.apply(this, [arg1, arg2, arg3])然後,被調用的函數裏面,我將訪問這些參數爲:

array[0] = "yeah"; 
array[1] = 200; 
array[2] = 150; 
array[3] = "fine"; 

上面的代碼只是「開始」,而我希望它作爲["begin", 1, 2, 3, 4, "end"]的輸出。 這裏有什麼問題?因爲據我所知,Function.prototype.apply方法使用單獨的參數爲callMe.apply(this, arrayOfArguments),這是行不通的。而方法call()工作正常。例如,用上面的例子,我只是用調用方法替換apply方法,並且它正好返回我想要的。我做錯了什麼? 我想使用apply方法,而不是調用方法。

回答

0

那是因爲Function.prototype.apply需要兩個參數。第二個參數是一個參數數組,所以你的代碼做這樣的事情:

function callMe(array){ 
    var s = ""; 
    s += array; 
    return s; 
} 
var myArr = ["begin", 1, 2, 3, 4, "end"]; 
callMe.apply(this, myArr); //SAME AS callMe(myArr[0],myArr[1],myArr[2],myArr[3],myArr[4],myArr[5]); 

所以callMe.apply(this, myArr)在這種情況下是一樣的callMe(myArr[0])

你必須做這樣的事情:

callMe.apply(this, [myArr]); 

或者像在以前的答案(FT1)。

+0

太棒了,像魅力一樣工作。 很遺憾,這個小例子在其他編碼站點沒有明確提及。 非常感謝Wojciechowski。 – user2652664

+0

沒問題:)很高興:D –

相關問題