我可以在JavaScript中以便捷的方式調用帶有參數數組的函數嗎?帶有參數數組的調用函數
例子:
var fn = function() {
console.log(arguments);
}
var args = [1,2,3];
fn(args);
我需要arguments
是[1,2,3]
,就像我的數組。
我可以在JavaScript中以便捷的方式調用帶有參數數組的函數嗎?帶有參數數組的調用函數
例子:
var fn = function() {
console.log(arguments);
}
var args = [1,2,3];
fn(args);
我需要arguments
是[1,2,3]
,就像我的數組。
你應該使用apply
:
var fn = function() {
console.log(arguments);
};
var args = [1,2,3];
fn.apply(null, args);
應用將使相當於函數調用:我用null
作爲apply
第一個參數
fn(1,2,3);
通知,將在this
關鍵字設置爲fn
內部的全局對象(window
)。
你也應該知道,arguments
對象是不是一個真正的數組,這是一個類似數組的對象,包含對應於被用來調用函數的參數,一個length
屬性,讓你的號碼數字指標使用的參數,以及對執行函數的引用(對於匿名函數遞歸非常有用)的arguments.callee
屬性。
如果你想從你的arguments
對象做出一個數組,你可以使用Array.prototype.slice
方法:
var fn = function() {
var args = Array.prototype.slice.call(arguments);
console.log(args);
};
編輯:在回答您的意見,是的,你可以使用shift
方法和設置它的返回值作爲你的函數的上下文(this
關鍵字):
fn.apply(args.shift(), args);
但請記住,shift
將刪除來自原始數組的第一個元素,並且您的函數將在沒有第一個參數的情況下被調用。
如果您還需要調用函數與所有其他參數,您可以:
fn.apply(args[0], args);
如果你不想改變的背景下,你可以簡單地提取自己的函數中的第一個參數:
var fn = function() {
var args = Array.prototype.slice.call(arguments),
firstArg = args.shift();
console.log(args, firstArg);
};
在ECMAScript 6中,您可以使用spread syntax (...
)來實現此目的。它比Function.prototype.apply()
更簡單易懂。
代碼示例:
const fn = function() {
console.log(arguments);
}
const args = [1,2,3];
fn(...args);
如果我想的範圍是數組的第一個元素?我需要使用shift()來僞造它嗎? – David 2009-12-10 16:04:03
@David:範圍是什麼意思? 'this'關鍵字? – CMS 2009-12-10 16:10:04
是的,使用apply(),第一個參數變成函數的作用域(this),對吧?這種情況下的範圍需要是第一個數組元素。 – David 2009-12-10 16:14:05