总之一句话,他们的作用就是改变当前函数所指向的this对象
1,call()、apply()、bind() 都是用来重定义 this 这个对象的!
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 一样。