javascript - 传递数组时,调用和 apply 都会为 String.prototype.toUppercase 产生相同的结果

标签 javascript

我通常看到我们应该在 apply 方法中使用数组,在 call 方法中使用参数数组:

如果我执行以下操作(调用方法将返回未定义):

var namelist = {
   f:'first name',
   l:'last name'
}
function func(a,b){
   console.log(this[a]+' '+this[b])
}

func.call(namelist,['f','l'])
//undefined undefined

func.apply(namelist,['f','l'])
//first name last name

但是,看看这里 call 和 apply 方法都有效:

String.prototype.toUpperCase.call(['a','b','c']) //returns 'A,B,C'
String.prototype.toUpperCase.apply(['a','b','c']) //returns 'A,B,C'

为什么调用方法有效?

如果我这样使用:

String.prototype.toUpperCase.call('a','b','c')
//this would return 'A' only.

最佳答案

call 的第一个参数和apply是函数的上下文,值为this .

But, look here both call and apply method works:

String.prototype.toUpperCase.call(['a','b','c']) //returns 'A,B,C'
String.prototype.toUpperCase.apply(['a','b','c']) //returns 'A,B,C'

是的,这与您的示例完全不同。您仅将一个参数传递给每个 callapply ,所以它们是相同的。你正在传递同样的this用这两种方法。它们是相同的调用。

String.prototype.toUpperCase.call('a','b','c')

//this would return 'A' only.

是的,因为你只通过了'a'thistoUpperCase 。它会用 apply('a', 'b', 'c') 做同样的事情(如果不是错误的话)再次,因为您只通过了 'a'thistoUpperCase 。不同的是apply如果您尝试给它提供两个以上的参数,则会引发错误。

<小时/>

原答案:

这不是用 call 传递参数的方式.

使用func.call(namelist, 'f', 'l') .

apply接受一个参数数组。 call只是接受参数。

关于javascript - 传递数组时,调用和 apply 都会为 String.prototype.toUppercase 产生相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25151862/

相关文章:

javascript - 在没有互联网连接的嵌入式系统中使用 AngularJS

javascript - 在 JavaScript 的 if 中使用动态运算符

javascript - 通过JavaScript将样式top添加到其他高度元素的ID元素

javascript - 如何在回答特定的 Google 表单项目时发送批准人电子邮件

javascript - EmberJS 在不同上下文中使用组件

javascript - [React]容器组件设计

javascript数组读取表单数据最佳实践

javascript - 如何向 Draft js 编辑器添加可点击的填充

javascript - 重复调用命中 php 文件的函数

javascript - 如何将 Controller 的范围属性传递给自定义指令?