call,apply,bind,这三个方法,其实只要会一个,就都会了,区别并不大
它们都是用来改变原本函数的this指向,和参数的方法
一.简单用法举例
function Animal(){
this.name = '动物'
this.tellName = function(food,food2){
console.log(`${this.name}想吃${food}和${food2}`)
}
}
let cat = {
name:'猫咪'
}
let dog = new Animal()
dog.tellName() //动物想吃undefined和undefined
一.call
dog.tellName.call(cat,'鱼','小鱼干') //猫咪想吃鱼和小鱼干
二.apply
dog.tellName.apply(cat,['鱼','小鱼干']) //猫咪想吃鱼和小鱼干
三.bind
let fun = dog.tellName.bind(cat,'鱼','小鱼干') //它并不会立即执行,而是返回一个函数
fun() //猫咪想吃鱼和小鱼干
fun() //猫咪想吃鱼和小鱼干
总结:它们改变了原本函数的this指向,以第一个参数作为this指向
二.实践应用
可用于构造函数继承
function User(){
this.login = function(){
console.log('登录')
}
}
function Manage(){
User.apply(this) //执行了User,在里面代码执行前,把this的指向改变成了Manage,所以自然,this.login烙印在了Manage这个函数里面,成功的让Manage也拥有了login这个函数
}
let people = new Manage()
people.login() //登录