call方法

143 阅读1分钟

了解: ES6之前没有提供extebds继承,我们通过构造函数+原型对象模拟实现继承,被称为组合继承。

语法: 被改变this指向的函数.call(指向谁,实参1,实参2)
 
 代码如下:
 function fn(x ,y){
   console.log(x+y);
注:这里的this指向window
 }
 
 let obj = {name:'this指向我'  };
注: call方法也可以调用函数

需求: 让fn函数this指向 obj对象

fn.call(obj , 1 , 2);

打印结果: this指向 { name:'this指向我' }   3

怎么实现构造函数之间的继承属性呢?

  需求2怎么在Son构造函数中使用Fater中的属性呢?
  
  注: 因为两个构造函数this指向不同,无法使用对方属性
  
  1.父构造函数
  function Fater (){
  注:这里this指向Fater实例化对象
     this.name =name;
  }
  2.子构造函数
  function Son (){
    注:这里this指向Son实例化对象
    利用call方法让Fater.call(this)(this)指向 Son(this)就继承了父构造函数的属性了。
    Fater.call(this);
  }

  let data = new Son('李');
  打印结果  {name:'李'}

**  怎么继承父构造函数的方法呢?**
方法1:如果是把方法挂在原型对象上,就直接赋值即可
  
  Son.prototype =Fater.prototype ;
  缺点:修改了父构造函数里面的原型
  
  方法2Son.prototype = new  Fater实例化
  注: Son构造函数原型对象指向Fater实例化对象
  Son.prototype = new  Fater();
  
  注:如果利用对象的形式修改了原型对象.别忘记利用Son.protoype.constructor=Son指回原来的原型对象