call:
是函数function的方法
A.call(B,x,y)
- 改变函数A的this指向,使之指向B;
//在A中定义让B可用的函数 的逻辑背书 this.eat = funciton(…){…};
- 把A函数放到B中运行,x和y是A函数的参数。
//直接让B调用A中的函数 的逻辑背书 cat.eat();
apply:
和call基本一样,传参列表形式不同。
A.call(B,[x,y])
bind:
需要返回一个函数然后才能调用,优势是可以多次调用,但call每次都得call一下。
let fun = A.bind(B,x,y);
fun();
基于call的继承和多重继承:
function Animal(){
//this指向小cat,eat函数让cat用了
this.eat = function(){
console.log("吃东西")
}
}
function Brid(){
this.fly = function(){
console.log("飞翔")
}
}
function Cat(){
//this指向小cat
Animal.call(this);
//多重继承
Bird.call(this);
this.sayName = function(){
console.log("输出自己名字")
}
}
let cat = new Cat();
cat.eat();//cat直接调用eat函数,相当于把Animal的函数放进Cat里,实现继承
cat.fly();