继承的方式

1 篇文章 0 订阅
1 篇文章 0 订阅

继承的方式

原型链继承

把父类的实例化对象 赋值给子类的原型对象

        + 优点: 可以从父类上面继承所有的方法和属性 
         + 缺点: 需要在两个地方进行传递参数

子类就没有自己的原型对象 如果添加方法会直接添加到父类的实例化对象里面
原型链继承实例

*/
        // 父类构造函数
        function Father(name, age) {
            this.name = name
            this.age = age
        }
        Father.prototype.money = function(){
              console.log('可以挣钱')
        } 
          // 把父类的实例化对象 赋值给子类的原型对象  
        Son.prototype  = new Father('小小强',20)
        Son.prototype.worker = function(){
            console.log('敲代码')
        }

使用构造函数继承

借用构造函数继承 (call) ,在子类构造函数体类 改变父类构造函数的this指向

   +缺点: 只能继承父类构造函数体类的方法 不能继承原型对象上面的方法
    + 优点: 只需要在一个地方进行传递参数

构造函数继承实例

 // 父类构造函数
        function Father(name, age) {
            this.name = name
            this.age = age
            console.log('fffff>', this)
        }
        Father.prototype.money = function () {
            console.log('可以挣钱')
            //   console.log(this) // 指向实例化对象
        }
        //子类构造函数  
        function Son(like, ...arg) {
            this.like = like
            console.log('son>>>>', this)  //  指向子类实例化对象  

            //    Father.call(this,...arg)
            Father.apply(this, arg)

        }
        Son.prototype.worker = function () {
            console.log('敲代码')
        }


        let s1 = new Son('打游戏', '小小强', 15)

组合继承

原型链继承和借用构造函数继承一起使用

+ 借用构造函数继承 继承父类构造函数体类的方法和属性  放在子类实例化对象体类
+ 原型链继承主要帮助 继承父类构造函数原型对象上面的方法和属性 

优点

           + 只需要在一个地方进行传递参数  
           + 子类没有自己的原型对象  

组合继承实例:

 // 父类构造函数
        function Father(name, age) {
            this.name = name
            this.age = age
            this.play = function(){
                console.log('打人')
            }
        }
        Father.prototype.money = function () {
            console.log('可以挣钱')
        }
          //子类构造函数  
        function Son(like, ...arg) {
            this.like = like
            // 借用构造函数继承
            Father.call(this,...arg)
        }
        Son.prototype.worker = function () {
            console.log('敲代码')
        }
        
        // 原型链继承  
         Son.prototype = new Father()

        // 子类实例化对象  
        
        let  s1 = new Son('打游戏','小小强',16)

拷贝继承

  • 在子类构造函数体类进行父类的实例化 得到一个实例化对象,遍历拷贝到子类的实例化对象体类
    特点:

         + 可以继承父类构造函数体类的方法和属性 也可以继承原型对象上面的方法和属性  
         + 也可以只只在一个地方传参数 
    

拷贝继承实例:

 // 父类构造函数
        function Father(name, age) {
            this.name = name
            this.age = age
            this.play = function(){
                console.log('打人')
            }
        }
        Father.prototype.money = function () {
            console.log('可以挣钱')
        }
         //子类构造函数  
        function Son(like, ...arg) {
            this.like = like
            // 父类实例化一个对象
            let f = new Father(...arg)
            // 拷贝到子类的实例化对象上面
            for(var key in f){
                this[key] = f[key]
            }
        }
        Son.prototype.worker = function () {
            console.log('敲代码')
        }

        // 子类实例化对象  
        
        let  s1 = new Son('打游戏','小强',16)

ES6继承

  • 语法
 class  子类 extends 父类{
                 constructor(){
                     super()  // 传递参数 必须写到第一行 
                 }
            } 

实例:

class Father{
            constructor(name,age){
                this.name = name 
                this.age = age 
            }
            say(){
                console.log('可以说话')
            }
        }



        class Son extends Father {
            constructor(...arg) {
                super(...arg)
                // this.say()

            }
            say() {
                console.log(123)
            }
            paly() { }
        }

        let s1 = new Son('小伟', 26)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值