Skip to content

程序员灯塔

Menu
  • Download
  • sitemap
  • 文章归档
  • 标签归档
  • 示例页面
Menu

javascript 中 call方法 和 apply 方法 的区别

Posted on 2017 年 7 月 25 日

function foo(arg1, arg2, arg3){

alert(art1 + arg2 + arg3);

}

[mark]foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3)[/mark]

call , apply 都属于 Function.prototype的一个方法, 它是JavaScript引擎内在实现的, 因为属于 Function.prototype

所以每个Function对象实例,也就是每个方法都有call , apply 属性.

两个方法容易混淆,因为它们作用一样,只是使用方式不一样.

相同点: 两个方法的作用完全一样

不同点:方法传递的方式不一样.

对于foo.call(this, arg1, arg2, arg3)

foo是一个方法,this是方法执行时上下文相关对象,arg1, arg2, arg3是传给foo方法的参数.这里所谓的方法执行时上下文相关对象, 如果有面向对象的编程基础,那很好理解,就是在类实例化后对象中的this.

在JavaScript中,代码总是有一个上下文对象,代码处理该对象之内. 上下文对象是通过this变量来体现的, 这个this变量永远指向当前代码所处的对象中.

下面一个例子,理解!

<script type=”text/javascript”>
function print(arg1,arg2,arg3){
alert(arg1 + ‘ – ‘+arg2+’ – ‘ + arg3)
}
function example(a, b, c ){
//call 方式
print.call(this,a,b,c);
//apply 方式,参数作为数组传递, 可以直接使用JavaScript方法内本身有的arguments数组
print.apply(this,arguments);
//封装成数组
print.apply(this,[a,b,c]);
}
</script>
<input type=”button” value=”test” onclick=”example(‘wang’,’ting’,’tttt’)” />

弹出了3次.

近期文章

  • 技术网站
  • 世界,您好!
  • Git学习记录(learngitbranching.js.org)
  • 阿里职场潜规则
  • 寻找两个正序数组的中位数

近期评论

  1. 一位 WordPress 评论者 发表在 世界,您好!

归档

  • 2024 年 9 月
  • 2024 年 3 月
  • 2022 年 12 月
  • 2021 年 8 月
  • 2021 年 6 月
  • 2021 年 3 月
  • 2021 年 2 月
  • 2020 年 11 月
  • 2020 年 5 月
  • 2020 年 3 月
  • 2019 年 11 月
  • 2019 年 10 月
  • 2019 年 9 月
  • 2019 年 7 月
  • 2019 年 6 月
  • 2019 年 5 月
  • 2019 年 3 月
  • 2018 年 9 月
  • 2018 年 8 月
  • 2018 年 7 月
  • 2018 年 4 月
  • 2018 年 2 月
  • 2018 年 1 月
  • 2017 年 12 月
  • 2017 年 11 月
  • 2017 年 10 月
  • 2017 年 8 月
  • 2017 年 7 月

分类目录

  • 未分类
©2025 程序员灯塔 | Design: Newspaperly WordPress Theme