在ES5怎么实现继承

**第一种原型链继承:**让子类的原型对象指向父类的实例实现对父类的属性和方法的继承

        // 定义父类
        function Animal(){ //父类
            this.name = 'cat'
        }
        Animal.prototype.getName = function(){ // 在Animal的原型链上绑定一个方法用来获取名字
            return this.name
        }
        // 定义子类
        function Felidae(){

        }
        Felidae.prototype = new Animal() //让子类的原型指向父类

        const felidae = new Felidae()
        console.log(felidae.getName())//cat--继承了父类的方法
        console.log(felidae.name)//cat--继承了父类的属性     
		
        /**
         * 缺陷:由于所有Felidae实例原型都指向同一个实例,
         *  因此对某个Felidae实例的来自父类的引用类型变量修改会影响所有的Felidae实例
         * 因为创建子类时没有向父类传参所以,没有实现super功能
         * /

**第二种构造函数继承:**在子类的构造函数中执行父类的构造函数,并为其绑定之类的this;

        // 定义父类
        function Animal(name){
            this.name = name
        }
        // 为父类绑定方法
        Animal.prototype.getName = function(){
            return this.name
        }
        // 定义子类
        function Felidae(){
           Animal.apply(this,arguments) 
        }
        const felidae = new Felidae('zhangsan')
        console.log(felidae.name)//zhangsan
        console.log(felidae.getName())//缺陷:继承不到父类原型的属性和方法 test.html:23 Uncaught TypeError: felidae.getName is not a function
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值