apply 和 call 方法实际上并不在函数这个实例对象中,而是在Function的prototype中。
相同之处:
1、都是用来改变函数的this的指向。
2、第一个参数都是this要指向的对象。
3、都可以利用后续参数传参
区别:
bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。
apply 传入的数值是数组,而call是直接传入一个一个的参数。
function Person(age) {
this.age = age
}
Person.prototype.getAge = function() {
console.log(this.age)
}
function Student(age, name) {
this.age = age
this.name = name
}
per1 = new Person(10)
per1.getAge() //10
stu1 = new Student(20)
per1.getAge.call(stu1) //20
per1.getAge.apply(stu1) //20
var gAge = per1.getAge.bind(stu1)
gAge() //20
传参
function ff(age, name) {
this.age = age
this.name = name
console.log(this.age + "===" + this.name);
}
ff(18, "小黑") //18===小黑
obj = {
}
ff.call(obj, 18, "小白") //18===小白
ff.apply(obj, [18, "小绿"]) // 18===小绿
var f = ff.bind(obj, 17, "小红")
f() //17===小红