js中的super


1.this和super的區別:

  • this關鍵詞指向函數所在的當前對象
  • super指向的是當前對象的原型對象

2.super的簡單應用

const person = {
    name:'jack'
}

const man = {
    sayName(){
        return super.name;
    }
}

Object.setPrototypeOf( man, person );

let n = man.sayName();

console.log( n )    //jack

3.super的另類實現

super.name  
等同於   
Object.getPrototypeOf(this).name【屬性】  
等同於   
Object.getPrototypeOf(this).name.call(this)【方法】

4.super中的this指向(易混淆)

super.name指向的是原型對象person 中的name,但是綁定的this還是當前的man對象。

const person = {
    age:'20多了',
    name(){
        return this.age;
    }
}

const man = {
    age:'18歲了',
    sayName(){
        return super.name();
    }
}

Object.setPrototypeOf( man, person );

let n = man.sayName();

console.log( n )    //18歲了

Object.getPrototypeOf(this).name指向的是person的name,綁定的this也是person

const person = {
    age:'20多了',
    name(){
        return this.age;
    }
}

const man = {
    age:'18歲了',
    sayName(){
        return Object.getPrototypeOf(this).name();
    }
}

Object.setPrototypeOf( man, person );

let n = man.sayName();

console.log( n )        //20多了

Object.getPrototypeOf(this).name.call(this)指向的是person的name,不過通過call改變了函數的執行上下文,所以this指向的還是man

const person = {
    age:'20多了',
    name(){
        return this.age;
    }
}

const man = {
    age:'18歲了',
    sayName(){
        return Object.getPrototypeOf(this).name.call(this)
    }
}

Object.setPrototypeOf( man, person );

let n = man.sayName();

console.log( n )    //18歲了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM