您的位置:首页 > 移动开发

JS中call apply 与 bind方法

qq_37361144 2019-06-03 22:16 95 查看 https://blog.csdn.net/qq_37361

call()

通过 call 方法,可以在一个对象上借用另一个对象上的方法。
语法 :fn.call(this, arg1, arg2, …)
this:在fn函数运行时指定的this值。需要注意的是下面几种情况
(1)不传,或者传null,undefined, 函数中的this指向window对象
(2)传递一个对象,函数中的this指向这个对象
(3)传递另一个函数的函数名,函数中的this指向这个函数的引用,并不一定是该函数执行时真正的this值
(4)值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象,如 String、Number、Boolean
arg1, arg2, …指定的参数列表。

apply()

语法与 call() 方法的语法几乎完全相同,唯一的区别在于,apply的第二个参数必须是一个包含多个参数的数组(或类数组对象)。
语法:fn.apply(this,[arg1, arg2,…])
this:同call()中this参数
[arg1, arg2]: 一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 fn 函数。如果该参数的值为null 或 undefined,则表示不需要传入任何参数。

bind()

bind() 方法与 apply 和 call 很相似,也是可以改变函数体内 this 的指向。
MDN的解释:bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为 this,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数
注意:bind方法的返回值是函数

总结

apply 、 call 、bind 都是用来改变函数的this对象的指向的;
bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用

何时使用

①传递的参数不多,使用fn.call(需要指向的对象,参数一,参数二,…)
②传递的参数较多,使用fn.apply(需要指向的对象,[参数一,参数二,…])
③只想将函数长期的绑定给某一个对象使用,使用fn.bing(需要指向的对象,参数一,参数二,…)

参考原文:https://www.geek-share.com/detail/2668539586.html

标签: