继承

我们研究类,就是研究类的继承、封装与多态 多态包括重载与重写


重载 :

后端语言是指函数名相同,参数类型与个数不同,根据不同参数列表调用不同函数。
前端JS没有真正意义上的重载。前端的重载是指同一个函数,根据传参不同实现不同效果。

继承

原型继承

其他语言的继承一般是拷贝继承,会把父类的属性和方法拷贝一份到子类,供子类的调取和使用。
JS中的继承是把父类的原型放到子类实例的原型链上,子类调取这些方法是通过
__proto__原型链查找机制完成的。

<script>
function A (x){ 
    this.x=x;
}
A.prototype.getX = function (){
    console.log(this.x);
}

function B (y){
    this.y=y;
}
B.prototype = new A (100); //使B的原型指向A的实例对象
B.prototype.constructor = B;  //最好加上这句话确保原型链完整
B.prototype.getY = function (){
    console.log(this.y);
}
</script>

特别提醒
1.其中一个子类对父类方法的修改也会影响其他子类
2.原型链上的私有属性将变为共有属性

Call继承

function A (x){ 
    this.x=x;
}
A.prototype.getX = function (){
    console.log(this.s);
}

function B (y){
    //A()  -->将A当作普通函数进行调用,this指向windows
    A.call(this,200);//通过call函数将A中的this指向B的实例对象b1 this.x=x-->b1.x=x
    this.y=y;
}
child把parent当作普通函数执行,让parent中this指向child,相当于给child设置了私有属性和方法,这样只能继承父类的私有属性和方法,并不能继承原型链上的

寄生组合原型继承

Call继承+类似原型继承  父类公有和私有属性方法分别是子类实例的公有和私有属性方法
<script>
function B (y){
    A.call(this,200);
    this.y=y;
}
B.prototype = Object.create(A.prototype);// Object.create()的代码如下
B.prototype.constructer = B;
B.prototype.getY = function (){
    console.log(Y);
}

Object.create = function (obj){
    let Fn = funciton (){};
    Fn.prototype = obj;
    return new Fn();
}
</script>

ES6中的继承

<script>
class A {
    constructor (x){
        this.x=x;
    }
    getX (x) {
        console.log(x)
    }
}

class B extends A{  //使B继承A
    constructor (y){  //子类继承父类可以不写construcor,一旦写了第一句写super()
        super(200); //相当于call(this,200) 把A当作普通函数调用,并修改this指向 
        this.y=y;
    }
    getY (y){
        console.log(y);
    }
}
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值