继承第一节(call继承、拷贝继承、寄生组合继承)

1、call 继承

类式(call)继承(一般类式继承是继承属性)
调用父类,通过call来改变this(把window改成子类)达到继承属性的目的。
function Person(name,age){
        this.name = name;
        this.age = age;
    }
    function Coder(name,age,job){
        Person.call(this,name,age);//改变了this指向
        this.job = job;
        // console.log(this);//Coder
    }
    let p = new Person('a',18);
    let c = new Coder('ab',16,'猿妹');

    console.log(c);//这样就继承了Person下的一些属性,

2、拷贝继承

遍历父类原型上的方法,只要是自身的就赋值给子类的原型
 function Person(name,age){
        this.name = name;
        this.age = age;
    }
    Person.prototype.say = function(){
        console.log('我叫'+this.name);
    }
    Person.prototype.runing = function(){
        console.log('我会跑');
    }

    function Coder(name,age,job){
        Person.call(this,name,age);
        this.job = job;
    }
    // Coder.prototype = Person.prototype; //此时赋址了

    Object.prototype.aa = 20;

    for(let attr in Person.prototype){ //因为in会遍历原型,所以只有父类原型上的属性才会赋值
        if(Person.prototype.hasOwnProperty(attr)){
            Coder.prototype[attr] = Person.prototype[attr];
        }
    }

    Coder.prototype.runing = function(){
        console.log('会骑UFO');
    }

    let p = new Person('a',18);
    let c = new Coder('b',16,'前端');

    c.runing();
    p.runing();

    console.log(Coder.prototype);//

3、

Object.create:内置Object类天生自带的方法
1.创建一个空对象
2.让新创建的空对象的__proto__指向第一个传递进来的对象
 function Person(name,age){
        this.name = name;
        this.age = age;
    }
    Person.prototype.say = function(){
        alert('我的名字'+this.name);
    }
    Person.prototype.runing = function(){
        alert('我会跑');
    }

    function Coder(name,age,job){
        Person.call(this,name,age);
        this.job = job;
    }   

    Coder.prototype = Object.create(Person.prototype);

    // Coder.prototype = Object.assign({},Person.prototype); //类似拷贝


    //  Object.assign(Coder.prototype,Person.prototype)


  
    Coder.prototype.say = function(){
        alert('duang,duang,duang,123!~');
    }

    let c = new Coder('a',26,'超级码农');
    let p = new Person('b',26);

    c.say();
    p.say();

 

posted @ 2018-11-03 20:55  Allisson-yan  阅读(607)  评论(0编辑  收藏  举报