call、apply、bind

call
call() 方法调用一个函数, 其具有一个指定的 this 值和分别地提供的参数(参数的列表)。

注意:该方法的作用和 apply() 方法类似,只有一个区别,就是 call() 方法接受的是若干个参数的列表,而 apply() 方法接受的是一个包含多个参数的数组。

语法:
fun.call(thisArg[, arg1[, arg2[, …]]])
参数:
• thisArg
加粗样式○ 在 fun 函数运行时指定的 this 值
○ 如果指定了 null 或者 undefined 则内部 this 指向 window
• arg1, arg2, …
○ 指定的参数列表

apply
apply() 方法调用一个函数, 其具有一个指定的 this 值,以及作为一个数组(或类似数组的对象)提供的参数。

注意:该方法的作用和 call() 方法类似,只有一个区别,就是 call() 方法接受的是若干个参数的列表,而 apply() 方法接受的是一个包含多个参数的数组。

语法:
fun.apply(thisArg, [argsArray])
参数:
• thisArg
• argsArray
apply() 与 call() 非常相似,不同之处在于提供参数的方式。 apply() 使用参数数组而不是一组参数列表。例如:
fun.apply(this, [‘eat’, ‘bananas’])

bind
bind() 函数会创建一个新函数(称为绑定函数),新函数与被调函数(绑定函数的目标函数)具有相同的函数体(在 ECMAScript 5 规范中内置的call属性)。 当目标函数被调用时 this 值绑定到 bind() 的第一个参数,该参数不能被重写。绑定函数被调用时,bind() 也接受预设的参数提供给原函数。 一个绑定函数也能使用new操作符创建对象:这种行为就像把原函数当成构造器。提供的 this 值被忽略,同时调用时的参数被提供给模拟函数。
语法:
fun.bind(thisArg[, arg1[, arg2[, …]]])
参数:
• thisArg
○ 当绑定函数被调用时,该参数会作为原函数运行时的 this 指向。当使用new 操作符调用绑定函数时,该参数无效。
• arg1, arg2, …
○ 当绑定函数被调用时,这些参数将置于实参之前传递给被绑定的方法。
返回值:
返回由指定的this值和初始化参数改造的原函数拷贝。

小结
• call 和 apply 特性一样
○ 都是用来调用函数,而且是立即调用
○ 但是可以在调用函数的同时,通过第一个参数指定函数内部 this 的指向
○ call 调用的时候,参数必须以参数列表的形式进行传递,也就是以逗号分隔的方式依次传递即可
○ apply 调用的时候,参数必须是一个数组,然后在执行的时候,会将数组内部的元素一个一个拿出来,与形参一一对应进行传递
○ 如果第一个参数指定了 null 或者 undefined 则内部 this 指向 window
• bind
○ 可以用来指定内部 this 的指向,然后生成一个改变了 this 指向的新的函数
○ 它和 call、apply 最大的区别是:bind 不会调用
○ bind 支持传递参数,它的传参方式比较特殊,一共有两个位置可以传递
1. 在 bind 的同时,以参数列表的形式进行传递
2. 在调用的时候,以参数列表的形式进行传递

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值