【发布时间】:2016-12-28 12:06:59
【问题描述】:
我很明白在JS上使用.apply()方法的基本原理。
function sayHi(x, y, z) {
console.log("I'm " + this.name + ", My choices are" + x + "," + y + "," + z);
}
var personA = {
name : "Albert"
};
var personB = {
name : "Bob"
};
var name = "Cindy";
var options = [" a", " b", " c"];
sayHi.apply(personA, options); // "I'm Albert, My choices are a, b, c"
sayHi.apply(personB, [" d", " e", " f"]); // "I'm Bob, My choices are d, e, f"
sn-p 以上是一个理想情况,您只想在sayHi() 函数中使用一定数量的数组元素,然后传递确切的sayHi() 函数所需的相同数量的数据(数组)。
然而,有时您需要利用给定数据集中的所有数组元素,其中数据也可能变化量。因此,sayHi() 函数不仅接受包含 3 个元素的数组,还可以接受包含 4、5、6 或更多元素的数组,不仅接受它,还利用传递的所有元素,如下所示:
function sayHi(....) {
// Accept any array with varying amount of elements, and using it
for (...) {
// A loop that will go through each element in given array
}
}
var personA = {
name : "Albert"
};
var personB = {
name : "Bob"
};
var name = "Cindy";
var options3 = [" a", " b", " c"];
var options4 = [" a", " b", " c", " d"];
var options5 = [" a", " b", " c", " d", " e"];
// and so on
sayHi.apply(personA, options3);
sayHi.apply(personA, options4);
sayHi.apply(personA, options5);
到目前为止,我还没有找到方法来做到这一点,所以我需要你的帮助来向我解释。
谢谢,
【问题讨论】:
-
您可以传入具有名称值对的对象,这些名称值对是要创建的属性及其关联值。然后您可以使用 for..in 来迭代对象的属性(或 Object.keys(params).forEach(...))。
-
老式 JS:使用
arguments对象。 ES6 以后:使用rest parameters。 -
@nnnnnn——“老派”意味着超过一半的浏览器在使用中。
标签: javascript arrays