了解: 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 ;
缺点:修改了父构造函数里面的原型
方法2:Son.prototype = new Fater实例化
注: Son构造函数原型对象指向Fater实例化对象
Son.prototype = new Fater();
注:如果利用对象的形式修改了原型对象.别忘记利用Son.protoype.constructor=Son指回原来的原型对象