apply方法
apply方法接收两个参数,第一个参数是this的指向,第二个参数是函数接收的参数,以数组的形式传入,切当第一个参数为null或undefined时,函数的this会默认指向window,使用apply方法改变this指向后原函数会立即执行,且此方法只是临时改变this指向一次。
//定义一个Person类
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayName() {
console.log(this.name);
}
}
// 定义一个函数
function fun() {
console.log(this);
}
// fun()
fun.apply(Person, [1, 2])//输出Person
call方法
call方法的第一个参数也是this的指向,后面传入的是参数列表。且当第一个参数为null或undefined时,默认指向window,和apply一样,call也只是临时改变一次this指向,并立即执行。
const p1 = new Person('张三', 18);
function fun1() {
console.log(this.name);
// console.log(this);
}
fun1.call(p1, 1, 2)//输出张三
bind方法
bind传入的参数和call类似,但是他改变this指向后不会立即执行,而是返回一个永久改变this指向的函数。
fun1()//输出undefined
let fun2 = fun1.bind(p1)
fun2()//输出张三