联系:
call(),apply(),bind()的作用都是改变this指向
call(),apply(),bind()三个方法的第一个参数都是相同的,就是this的指向
区别--传入的参数
apply
apply()
方法调用一个具有给定this
值的函数,以及以一个**数组(或类数组对象)**的形式提供的参数。
它的第二个参数必须是数组(或arguments)。如果该参数的值为 null
或undefined
,则表示不需要传入任何参数。
当第二个参数是arguments时,它通常被用作被调用对象的所有未指定的参数。 这样,在使用apply函数的时候就不需要知道被调用对象的所有参数。 可以使用arguments来把所有的参数传递给被调用对象。
用法:
fn.apply(obj, [1, 2])
call
call()
方法使用一个指定的 this
值和单独给出的一个或多个参数来调用一个函数。
call()用法和apply类似,区别在于,call()
方法接受的是一个参数列表
用法:
fn.call(obj, 1, 2)
bind
bind()使用方法和call()一致,只是应用场景有细微差别。
bind()
方法创建一个新的函数(绑定函数),在 bind()
被调用时,这个新函数的 this
被指定为 bind()
的第一个参数,而其余参数将作为新函数的参数,供调用时使用(意味着这个函数不会立即执行)。调用绑定函数通常会导致执行包装函数(原函数)。
用法:
fn.bind(obj, 1, 2)
this改变为obj了,但是绑定的时候立即执行,当触发点击事件的时候执行的是fn的返回值undefined
document.onclick = fn.call(obj);
bind会把fn中的this预处理为obj,此时fn没有执行,当点击的时候fn执行
document.onclick = fn.bind(obj);
另外,bind()并不支持IE6~IE8,会报错
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!