Javascript 如何使用字符串数组的apply方法?

Javascript 如何使用字符串数组的apply方法?,javascript,arrays,apply,Javascript,Arrays,Apply,有人能解释一下为什么我不能正确使用字符串数组上的apply方法吗 function speak(line) { console.log(line); } var whiteRabbit = {type: "white", speak: speak}; speak.apply(whiteRabbit, ["Burp!","Skree","Hello"]); 输出是打嗝,为什么不是整个阵列?如何使用apply方法实现这一点?将数组扩展为函数参数,因为您唯一的参数是行,数组中的第一项被分配

有人能解释一下为什么我不能正确使用字符串数组上的apply方法吗

function speak(line) {
     console.log(line);
}
var whiteRabbit = {type: "white", speak: speak};
speak.apply(whiteRabbit, ["Burp!","Skree","Hello"]);
输出是打嗝,为什么不是整个阵列?如何使用apply方法实现这一点?

将数组扩展为函数参数,因为您唯一的参数是
,数组中的第一项被分配给它,其余的被忽略

顺便说一句-由于
speak
功能不以任何方式使用
,因此
apply的第一个参数在这种情况下并不重要

如果要向函数添加更多参数,可以查看其工作原理:

功能发言(a、b、c){
控制台日志(a、b、c);
}
说。申请(空,[“打嗝!”,“斯克雷”,“你好])将数组扩展为函数参数,因为您唯一的参数是
,数组中的第一项被分配给它,其余的被忽略

顺便说一句-由于
speak
功能不以任何方式使用
,因此
apply的第一个参数在这种情况下并不重要

如果要向函数添加更多参数,可以查看其工作原理:

功能发言(a、b、c){
控制台日志(a、b、c);
}
说。申请(空,[“打嗝!”,“斯克雷”,“你好])来自

apply()
方法使用给定的
值和作为数组(或数组)提供的
参数调用函数

仅将数组的第一个元素作为参数
。如果使用更多参数,也可以看到阵列的其余部分

功能发言(第行、第1行、第2行){
控制台日志(行);
console.log(第1行);
控制台日志(第2行);
}
var whiteRabbit={
键入:“白色”,
说:说
};
说。申请(白兔,[“打嗝!”,“斯克里”,“你好])来自

apply()
方法使用给定的
值和作为数组(或数组)提供的
参数调用函数

仅将数组的第一个元素作为参数
。如果使用更多参数,也可以看到阵列的其余部分

功能发言(第行、第1行、第2行){
控制台日志(行);
console.log(第1行);
控制台日志(第2行);
}
var whiteRabbit={
键入:“白色”,
说:说
};

说。申请(白兔,[“打嗝!”,“斯克里”,“你好])
我假设
fatRabbit
就是
whiteRabbit
,你的问题是为什么你只看到
打嗝而不是完整数组

原因是
apply
使用数组来调用带有离散参数的函数,因此第一个条目显示为
参数,而您看不到其他条目,因为您没有相应的参数

如果要查看数组,请使用
call
而不是
apply
;然后,
将引用数组,而不仅仅是第一个条目:

功能发言(行){
控制台日志(行);
}
var-whiteRabbit={type:“white”,speak:speak};

说话。打电话(白兔,[“打嗝!”,“斯克里”,“你好])
我假设
fatRabbit
就是
whiteRabbit
,你的问题是为什么你只看到
打嗝而不是完整数组

原因是
apply
使用数组来调用带有离散参数的函数,因此第一个条目显示为
参数,而您看不到其他条目,因为您没有相应的参数

如果要查看数组,请使用
call
而不是
apply
;然后,
将引用数组,而不仅仅是第一个条目:

功能发言(行){
控制台日志(行);
}
var-whiteRabbit={type:“white”,speak:speak};

说话。打电话(白兔,[“打嗝!”,“斯克里”,“你好])您需要添加更多参数

功能发言(第行、第2行、第3行){
控制台日志(第行、第2行、第3行);
}
var-whiteRabbit={type:“white”,speak:speak};

说。申请(白兔,[“打嗝!”,“斯克里”,“你好])您需要添加更多参数

功能发言(第行、第2行、第3行){
控制台日志(第行、第2行、第3行);
}
var-whiteRabbit={type:“white”,speak:speak};

说。申请(白兔,[“打嗝!”,“斯克里”,“你好])你可以让兔子一个接一个地说:

 ["Burp!","Skree","Hello"].forEach( speak );
如果您也想更改上下文,请执行以下操作:

["Burp!","Skree","Hello"].forEach( word => speak.call(rabbit, word));

你可以让兔子一个接一个地说:

 ["Burp!","Skree","Hello"].forEach( speak );
如果您也想更改上下文,请执行以下操作:

["Burp!","Skree","Hello"].forEach( word => speak.call(rabbit, word));

什么是肥兔?对不起,应该是白兔…我怎样才能纠正它什么是肥兔?对不起,应该是白兔…我怎样才能纠正它谢谢你的回答!所以让它成为动态的,我应该使用arguments.length。对吗?@rajeev或者更好的rest/spread语法:
函数speak(…args){console.log(…args);}
谢谢你的回答!所以让它成为动态的,我应该使用arguments.length。对吗?@rajeev或者更好的rest/spread语法:
function speak(…args){console.log(…args);}
谢谢你的回答!你能演示一下如何让它变得动态吗?@RajeevHanda:你说的“动态”是什么意思?@RajeevHanda:我猜了一下你上面说的动态是什么意思。谢谢你的回答!你能展示一下如何让它变得动态吗?@RajeevHanda:你说的“动态”是什么意思?@RajeevHanda:我猜了一下你上面说的动态是什么意思。