例:
var girl = {
name: "小红",
age: "7"
}
var boy = {
name:"小明",
age: "8",
fullName: function (sex,hobby) {
return this.name + "今年" + this.age + "岁,性别" + sex + ",喜欢" + hobby;
}
}
boy.fullName("男","打游戏")//小明今年8岁,性别男,喜欢打游戏
boy.fullName.call(girl,"女","跳舞") //小红今年7岁,性别女,喜欢跳舞
boy.fullName.apply(girl,["女","跳舞"]) //小红今年7,性别女,喜欢跳舞
boy.fullName.bind(girl,"女","跳舞")() //小红今年7,性别女,喜欢跳舞
相同之处
从上面打印出的结果不难看出 call、apply、bind 都是用来修改 this 指向的方法。不传任何参数的时候,则默认为将 this 指向修改为 windows,有参数的时候 this 指向第一个参数。
不同之处
call 方法传递给函数的多个参数通过逗号分隔
apply 方法传递给函数的多个参数需要使用数组的方式传递
bind 它的参数和 call 一样,但是返回的是函数,所以使用 bind 记得后面加括号调用
call 和 apply 哪个性能比较好
其实当没有参数的时候,call 和 apply 是没有明显区别的。但是当有 this 指向或者执行参数时,call 的性能要明显优于 apply,尤其是参数超过三个的时候
因为 apply 的参数是通过数组的方式传递,解析数组获取参数需要消耗性能。