我在apply方法中传递了一个数组,我期望返回数组的全值,但是当我使用数组的索引值给出该索引的值时,数组方法实际上返回了字符索引:
var obj = {
name: 'Dogs'
}
var arr = ['India', 'Slovenia', 'Scotland'];
var getanimalsinfo = function(a) {
return this.name + ' is good animal found in ' + a[2]
}
console.log(getanimalsinfo.apply(obj, arr));Run Code Online (Sandbox Code Playgroud)
在这里,我期待"狗是在苏格兰发现的好动物",但我得到了:'狗是在d'中找到的好动物.这里d是印度的第三个指数.请让我知道我做错了什么.谢谢.
.apply将数组的每个元素作为单独的参数传递给函数.即在你的情况下,该函数被调用为getanimalsinfo(arr[0], arr[1], arr[2]),因此a将具有该值'india'.
如果要将数组作为单个参数传递(相当于getanimalsinfo(arr)),请.call改用:
var obj = {
name: 'Dogs'
}
var arr = ['india', 'slovenia', 'scotland'];
var getanimalsinfo = function(a) {
return this.name + ' is good animal found in ' + a[2]
}
console.log(getanimalsinfo.call(obj, arr));
// ^^^^Run Code Online (Sandbox Code Playgroud)
替代方案:
.apply另一个数组中:getanimalsinfo.apply(obj, [arr])function(...a) { /*...*/ }有关更多信息,请查看MDN文档:
有关: