JavaScript中的继承

继承

​ ES6之前并没有给我们提供extends继承。我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承。

call()

调用这个函数, 并且修改函数运行时的this 指向

fun.call(thisArg, arg1, arg2, ...);call把父类的this指向子类

thisArg :当前调用函数this的指向对象

arg1,arg2:传递的其他参数

利用构造函数实现子类的继承:

属性的继承

<script>
   function Person(name, age, sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
   }

   function Star(name, age, sex, hair) {
       // 属性的继承 用父类调用call方法,改变当前this的指向就可以
       Person.call(this, name, age, sex);
       this.hair = hair;
   }
   var lyf = new Star("刘亦菲", 20, "女", "长头发");
   console.log(lyf);
</script>

方法的继承

实现方法把父类的实例对象保存给子类的原型对象

一般情况下,对象的方法都在构造函数的原型对象中设置,通过构造函数无法继承父类方法。核心原理:

①将子类所共享的方法提取出来,让子类的prototype 原型对象= new 父类()

②本质:子类原型对象等于是实例化父类,因为父类实例化之后另外开辟空间,就不会影响原来父类原型对象

③将子类的constructor指回子类构造函数本身

方法继承:把父类的实例对象赋值给子类的原型对象,再用contructor指回子类构造函数本身

<script>
    function Person(name, age, sex) {
         this.name = name;
         this.age = age;
         this.sex = sex;
    }
    Person.prototype.sing = function() {
        console.log("唱歌");
    }

    function Star(name, age, sex, hair) {
         Person.call(this, name, age, sex);
         this.hair = hair;
    }
    // 继承方法:把父类的实例对象,赋值给子类的原型对象
    Star.prototype = new Person();
    Star.prototype.contructor = Star;
    var lyf = new Star("刘亦菲", 20, "女", "长头发");
    console.log(lyf);
    lyf.sing();
</script>

注意:一定要让Son指回构造函数

实现继承后,让Son指回原构造函数
Son.prototype = new Father();
Son.prototype.constructor = Son;

总结:用构造函数实线属性继承,用原型对象实线方法继承

ES5:组合继承,构造函数和原型对象

属性继承:调用父类函数,用call改变this指向

方法继承;把父类的实例对象赋值给子类的原型,用contructor指回子类构造函数本身

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值