js中call方法和apply方法以及bind方法的区别
js中call方法和apply方法以及bind方法的区别
call()、apply()、bind() 都是用来重定义 this 这个对象
var person={name:"jack",age:"14"};
区别一(调用方式):
call()/apply() 是立即调用函数
bind是将函数返回
//调用方式
function fun(){
console.log("姓名:"+this.name+",年龄:"+this.age);
}
//fun(); //姓名:,年龄:undefined
fun.call(person); //姓名:jack,年龄:14
fun.apply(person); //姓名:jack,年龄:14
fun.bind(person)(); //姓名:jack,年龄:14
bind方法后面多了个() 所以bind返回的是一个新的函数,你必须调用它才会被执行
区别二(传参方式):
call 的参数是用逗号分隔,
apply 的所有参数都必须放在一个数组里面传进去
bind 可以像call那样传参,但是由于bind返回的仍然是一个函数,所以我们还可以在调用的时候再进行传参
function fun(color,color1){
console.log("姓名:"+this.name+",年龄:"+this.age+",喜欢的颜色是"+color+"和"+color1);
}
fun.call(person,"白色","蓝色"); //用逗号分隔
fun.apply(person,["粉红色","浅灰色"]); //所有参数都必须放在一个数组里面
fun.bind(person,"紫色","黄色")(); //可以像call那样传参
fun.bind(person)("黑色","红色"); //可以调用的时候再进行传参