bind,call和apply简单总结

1 篇文章 0 订阅
共同点:都是用来改变this环境。
bind和 apply,call不同点:
执行机制不同。
bind绑定是返回一个新的函数的,这个新函数的内容是原函数的内容,this是bind绑定的this环境。不执行原函数。
如:function fn(a,b,c)={}; var fn2 = fn.bind({ a:1,b:2 });
apply和call是在原函数执行时,动态改变this环境。

apply和call
相同点:第一个参数都是要绑定的this环境变量。
不同点:
参数不同。
apply 最多两个参数,第二个参数是个数组,里面存放原函数的参数。
如:function fn(a,b,c)={}; fn.apply( this, [ a,b,c ] );
call 可以有多个参数,除了第一个参数,其他都是原函数的参数。
如:function fn(a,b,c)={}; fn.call( this, a, b, c )
总结:改变函数的执行环境,相当于函数在新的环境中从新运行或者定义。bind是在新环境中定义,并且返回一个新函数。apply和call是在新环境中执行,继承就是利用这个特性来实现的,在其他类中使用现有类的函数构造自己的内部环境。
如:
function A ( name ){
this . name = name ;
this . fn = function (){
console . log ( this );
}
}
function B ( str ){
A . call ( this , str );
}
var b = new B ( 'xiaoming' );
b . fn ();

call的作用:在B的执行上下文中执行一遍A操作


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值