JavaScript的apply、call 和 bind


prtyaa
prtyaa 2023-12-26 18:32:05 68278
分类专栏: 资讯

1、每个函数都包含有非继承而来的方法:call()、apply() 。它们的作用都是在特定的作用域中调用函数,即设置函数体内 this 对象的值。

  • 传递参数
  • 扩充函数赖以运行的作用域

2、apply()

apply() 方法接收两个 参数:一个是在其中运行函数的作用域,另一个是参数数组。其中第二个 参数可以是 Array的实例,也可以是 arguments 对象。

例如:

在这个例子中,callSum1()执行sum()函数时,传入了this作为this值(因为是在全局作用域中调用的,所以传入的是window对象)和 arguments 对象。callSum2()调用sum()函数传入this 和参数数组。两个函数的返回值是一致的。

3、call()

call()方法第一个参数是 this,其余参数逐个列出来。它和apply的作用相同,区别只是传递参数的方式。

例如:

4、call()和apply() 扩充函数作用域

使用call()和apply() 扩充函数作用域的最大好处是,对象不需要与方法有任何耦合关系。

例如:

5、bind()

bind()方法是ECMAScript 5 定义的方法。这个方法会创建一个函数实例,其this值会被绑定传给bind()函数的值。

例如:

5、三者的不同点

  • call()和apply()作用相同,可以改变this的作用域,不同点是传递参数的形式不同。
  • bind() 也可以改变this的作用域,其不同是在于它返回的是一个函数实例。

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=31015
赞同 0
评论 0 条