1. 程式人生 > >繼承第一節(call繼承、拷貝繼承、寄生組合繼承)

繼承第一節(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();