call:

是函数function的方法

A.call(B,x,y)

  1. 改变函数A的this指向,使之指向B;

//在A中定义让B可用的函数 的逻辑背书 this.eat = funciton(…){…};

  1. 把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的继承和多重继承:

  1. function Animal(){
  2. //this指向小cat,eat函数让cat用了
  3. this.eat = function(){
  4. console.log("吃东西")
  5. }
  6. }
  7. function Brid(){
  8. this.fly = function(){
  9. console.log("飞翔")
  10. }
  11. }
  12. function Cat(){
  13. //this指向小cat
  14. Animal.call(this);
  15. //多重继承
  16. Bird.call(this);
  17. this.sayName = function(){
  18. console.log("输出自己名字")
  19. }
  20. }
  21. let cat = new Cat();
  22. cat.eat();//cat直接调用eat函数,相当于把Animal的函数放进Cat里,实现继承
  23. cat.fly();