浅谈bind,call,apply的区别
不同点
fn.bind(obj)返回的是一个函数
fn.call(obj,parm1,parm2)返回的是一个处理结果
fn.apply(obj,[parm1,parm2])返回的是一个处理结果
相同点
它们共同的作用是改变函数里面 this 的指向。
举例
var g = 3; // 全局变量 window的属性 let obj1 = { g:30 } let obj2 = { id: Symbol("ids"), g:300, c:function() { return this.g; } } /*常态下调用obj2的c方法*/ console.log(obj2.c(),"obj2.c()"); //调用obj2的c方法在链式调用bind方法 console.log(obj2.c.bind(window),"obj2.c.bind(window)") console.log(obj2.c.bind(obj1),"obj2.c.bind(obj1)") //调用obj2的c方法在链式调用call方法 console.log(obj2.c.call(obj1),"obj2.c.call(obj1)") //调用obj2的c方法在链式调用apply方法 console.log(obj2.c.apply(obj1),"obj2.c.apply(obj1)")
结果

如何传参
var g = 3; // 全局变量 window的属性 let obj1 = { g:30 } let obj2 = { id: Symbol("ids"), g:300, c:function(parms1,parms2) { console.log(parms1+parms2); } } //传参数给bind obj2.c.bind(obj1)(1,1); //传参数给call obj2.c.call(obj1,2,2) //传参数给apply obj2.c.apply(obj1,[3,3])


浙公网安备 33010602011771号