JS 继承 原型链

原型继承

子类继承父类的属性和方法
继承方式:Child.prototype = new Person();
添加原型属性和方法:Person.prototype.color = "黄";

优点缺点
子类实例 instanceof 父类
继承子类构造属性方法construction
继承父类构造属性方法construction
继承父类原型属性方法prototype
给父类传递参数×
多继承×

原型链

    var arr = new Array();
    console.log(arr);//实例化
    console.log(arr.__proto__); //原型对象Array()
    console.log(arr.__proto__.__proto__);//Array()的原型对象Object 
    //原型继承 父类
    Child.prototype = new Person();
    var child = new Child();

    console.log(child.__proto__);//父类Person
    console.log(child.__proto__.__proto__);//父类Person的原型对象Object
    console.log(child.__proto__.__proto__.__proto__);//Object的原型对象
    console.log(child.__proto__.__proto__.__proto__.__proto__);//null
    //_proto_原型链:链接的过程  prototype原型对象:父类

构造继承

    function Cat(n,se, ag,typ) {
        this.name = n;
        this.eat = function () {
            return "吃东西"
        }
        //构造继承
        Animail.apply(this,[se, ag]);//定义好的函数对象Animail(se, ag),apply(this,[])
        //构造继承
        Type.call(this,typ);//定义好的函数对象Type(typ),call(this,a,b)
    }
优点缺点
给父类传递参数
多继承
继承子类构造属性方法construction
继承父类构造属性方法construction
子类实例 instanceof 父类×
继承父类原型属性方法prototype×

组合继承:原型继承+构造继承

    function Child(n, a, s) {
        this.age = a;
        this.sex = s;
        //构造继承
        Person.call(this, n);
    }
    //原型链继承
    Child.prototype = new Array();
优点缺点
给父类传递参数
多继承
继承子类构造属性方法construction
继承父类构造属性方法construction
子类实例 instanceof 父类
继承父类原型属性方法prototype

寄生组合继承:避免两次调用父类构造函数

 * 寄生组合继承:处理组合继承的缺点 ,避免两次调用父类的构造函数
 * 原理是把父类的原型给予一个空对象的原型
    (function () {
        var fn = function () {};        
        //将父类的原型对象给予空对象
        fn.prototype = Person.prototype;
        Child.prototype = new fn();
    })();

实例继承

继承方式:子类里面 实例化父类,并返回父类实例

    function Child(n, s) {
        var per = new Person(n, s);
        return per;
    }
优点缺点
多继承×
继承子类构造属性方法construction×
子类实例 instanceof 子类×
子类实例 instanceof 父类
继承父类构造属性方法construction
继承父类原型属性方法prototype
给父类传递参数

拷贝继承(占内存,不建议使用)

继承方式:将父类里面的属性方法拷贝给子类

    function Cat(n, a) {
        this.age = a;
        //拷贝
        var animal = new Animal(n);
        for (var p in animal) {
            Cat.prototype[p] = animal[p];
        }
        //继续new 别的对象  进行拷贝
    }
优点缺点
继承子类构造属性方法construction×
子类实例 instanceof 父类×
继承父类构造属性方法construction
给父类传递参数
多继承
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值