JS中call apply 与 bind方法
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(需要指向的对象,参数一,参数二,…)
- 深入理解JS中的Function.prototype.bind()方法
- prototype.js中Function.prototype.bind方法浅解
- JS中的bind方法学习
- 理解JS中的call、apply、bind方法
- js apply/call/caller/callee/bind使用方法与区别分析
- 理解JS中的call、apply、bind方法
- JS中的bind()方法
- JS中的call()和apply()方法和bind()
- js apply/call/caller/callee/bind使用方法与区别分析
- JS中的bind方法
- JS中bind方法与函数柯里化
- 【转载】JS中bind方法与函数柯里化
- 理解JS中的call、apply、bind方法
- IE下使用bind的JS方法
- js apply/call/caller/callee/bind使用方法与区别分析
- JS 中的 bind() 方法使用笔记
- 理解JS中的call、apply、bind方法
- js中改变this指向的三个常用方法bind,call和apply
- js apply/call/caller/callee/bind使用方法与区别分析
- javascript中call apply 与 bind方法详解