多种组合式继承方法

// 寄生组合式继承,最理想的继承方法
        function inheritPrototype(sub, super) {  //sub是子函数,super是父函数,sub继承super
            var prototype = Object.create(super.prototype); // 创建对象,父原型的副本
            prototype.constructor = sub; // 增强对象 把创建出来的父对象副本的构造器指向子函数
            sub.prototype = prototype; // 修改子函数的原型
        }

        function staff() {        //创建父构造函数
            this.company = "ABC";
            this.test = [1, 2, 3];
        }
        staff.prototype.companyName = function () {        //添加父构造函数的原型方法
            return this.company;
        }

        function employee(name, profession) {        //创建子构造函数
            staff.call(this, name);        //子构造函数强制调用父构造函数的属性
            this.employeeName = name;
            this.profession = profession;
        }

        // 将父类原型指向子类
        inheritPrototype(employee, staff)    //子继承父的原型对象并增强
        let instanceOne = new employee("Andy", "A");
        let instanceTwo = new employee("Rose", "B");
        instanceOne.test.push(4);
        // 测试 
        console.log(instanceTwo.test); // [1,2,3]
        console.log(instanceOne.companyName()); // ABC
        // 通过 hasOwnProperty() 方法来确定自身属性与其原型属性
        console.log(instanceOne.hasOwnProperty('test')) // true
        // 通过 isPrototypeOf() 方法来确定原型和实例的关系
        console.log(staff.prototype.isPrototypeOf(instanceOne)); // true




// ES6 class继承
        class Father{
            constructor(name,age){
                this.name=name;
                this.age = age;
            }
            sayHi(){
                console.log("我的名字叫:"+this.name,"我是父对象的sayHi方法");
            }

        }
        let f = new Father("爸爸",48);
        
        // 创建子类构造函数并继承Father
        class Child extends Father{
            constructor(name,age,money){
                super(name,age);
                this.money = money;
            }
            sayHi(){
                super.sayHi();
                console.log("我的名字叫:"+this.name,"我是子对象的sayHi方法");
            }
            showMoney(){
                console.log("我是儿子,我有钱:"+this.money);
            }
        }
        let c = new Child("儿子",24,1000000);
        console.dir(c);
        c.showMoney();
        c.sayHi();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值