bind,apply,call使用和区别

总之一句话,他们的作用就是改变当前函数所指向的this对象

1,call()、apply()、bind() 都是用来重定义 this 这个对象的!

bind,apply,call使用和区别

obj.objAge;  // 17
obj.myFun()  // 小张年龄 undefined

当我们用aplly,bind,call来重新定义this时

obj.myFun.call(db);    // 德玛年龄 99
obj.myFun.apply(db);    // 德玛年龄 99
obj.myFun.bind(db)();   // 德玛年龄 99

以上除了 bind 方法后面多了个 () 外 ,结果返回都一致!

由此得出结论,bind 返回的是一个新的函数,你必须调用它才会被执行。

2,对比call 、bind 、 apply 传参情况下

将原函数改为

myFunc:function(x,y){

console.log(this.name+"年龄"+this.age+x+y)

}

obj.myFun.call(db,'成都','上海');     // 德玛 年龄 99  来自 成都去往上海
obj.myFun.apply(db,['成都','上海']);      // 德玛 年龄 99  来自 成都去往上海  
obj.myFun.bind(db,'成都','上海')();       // 德玛 年龄 99  来自 成都去往上海

call直接以逗号分隔传参,而apply必须以数组形式传参,bind 除了返回是函数以外,它 的参数和 call 一样。

上一篇: call()、apply()、bind() 的用法


下一篇:理解JavaScript中的apply,call,bind方法