js-6种继承方式

1.原型链继承

2.构造继承

3.实例继承

4.拷贝继承

5.组合继承

6.寄生组合继承

<script type="text/javascript">
    function Animal(name) {
        this.name = name || 'Animal';
        this.sleep = function(){
            console.log(this.name+" 正在睡觉");
        }
    }
    Animal.prototype.eat = function(food){
        console.log(this.name+'正在吃:'+food);
    };
    /*原型链继承*/
    /*function Cat(){
    }
    Cat.prototype = new Animal();
    Cat.prototype.name = 'cat';
    var cat = new Cat();
    console.log(cat.name);//cat
    cat.eat('fish');//cat正在吃:fish
    cat.sleep();//cat 正在睡觉
    /!*instanceof运算符判断一个构造函数的prototype属性所指的对象是否在另外一个要检测对象的原型链上*!/
    console.log(cat instanceof Animal);//true
    console.log(cat instanceof Cat);//true*/
    /*构造继承*/
    /*function Cat(name){
        Animal.call(this);
        this.name = name || 'Tom';
    }
    var cat = new Cat();
    console.log(cat.name);//Tom
    cat.sleep();//Tom 正在睡觉
    console.log(cat instanceof Animal);//false
    console.log(cat instanceof Cat);//true*/
    /*实例继承*/
    /*function Cat(name){
        var instance = new Animal();
        instance.name = name || 'xiaoqing';
        return instance;
    }
    var cat = new Cat();
    console.log(cat.name);//xiaoqing
    cat.sleep();//xiaoqing 正在睡觉
    console.log(cat instanceof Animal);//true
    console.log(cat instanceof Cat);//false*/
    /*拷贝继承*/
    /*function Cat(name) {
        var animal = new Animal();
        for(var p in animal){
            Cat.prototype[p] = animal[p];
        }
        Cat.prototype.name = name || 'Tom';
    }
    var cat = new Cat();
    console.log(cat.name);//Tom
    cat.sleep();//Tom 正在睡觉
    console.log(cat instanceof Animal);//false
    console.log(cat instanceof Cat);//true*/
    /*组合继承*/
    /*function Cat(name) {
        Animal.call(this);
        this.name = name || 'Tom';
    }
    Cat.prototype = new Animal();
    Cat.prototype.constructor = Cat;
    var cat = new Cat();
    console.log(cat.name);//Tom
    cat.sleep();//Tom 正在睡觉
    console.log(cat instanceof Animal);//true
    console.log(cat instanceof Cat);//true*/
    /*寄生组合继承*/
    function Cat(name) {
        Animal.call(this);
        this.name = name || "pxq";
    }
    (function(){
        //创建一个没有实力方法的类
        var Super = function(){
        };
        Super.prototype = Animal.prototype;
        //将实例作为子类的原型
        Cat.prototype = new Super();
    })();
    var cat = new Cat();
    console.log(cat.name);//pxq
    cat.sleep();//pxq 正在睡觉
    console.log(cat instanceof Animal);//true
    console.log(cat instanceof Cat);//true
    Cat.prototype.constructor = Cat;
</script>

参考:https://www.cnblogs.com/humin/p/4556820.html

这个不错的:https://github.com/mqyqingfeng/Blog/issues/16

猜你喜欢

转载自blog.csdn.net/xiaoqingpang/article/details/79015451