Rumah > hujung hadapan web > Soal Jawab bahagian hadapan > Apakah kegunaan super dalam es6

Apakah kegunaan super dalam es6

WBOY
Lepaskan: 2022-05-05 18:40:49
asal
2348 orang telah melayarinya

Penggunaan super: 1. Apabila super digunakan sebagai fungsi, ia digunakan untuk mewakili pembina kelas induk Sintaks ialah "pembina(){super();}"; super digunakan sebagai objek, ia digunakan dalam kaedah biasa digunakan untuk menunjuk ke objek prototaip kelas induk, dan digunakan untuk menunjuk ke kelas induk dalam kaedah statik.

Apakah kegunaan super dalam es6

Persekitaran pengendalian tutorial ini: sistem Windows 10, ECMAScript versi 6.0, komputer Dell G3.

Apakah penggunaan super dalam es6

Kes pertama: apabila super digunakan sebagai fungsi, ia mewakili pembina kelas induk

Keperluan ES6, Pembina subkelas mesti melaksanakan fungsi super sekali

class A {}
class B extends A {
  constructor() {
    super();//子类的构造函数,必须执行一次super函数,代表父类的构造函数
  }
}
Salin selepas log masuk

Nota: Walaupun super mewakili pembina kelas induk, contoh yang dikembalikan pada masa ini ialah contoh B, itu ialah, super dalam ini merujuk kepada contoh B, jadi super() adalah bersamaan dengan A.prototype.constructor.call(this)

class A {
  constructor() {
    console.log(new.target.name);
  }
}
class B extends A {
  constructor() {
    super();
  }
}
new A() // A
new B() // B
Salin selepas log masuk

Dalam kod di atas, new.target menunjuk kepada fungsi yang sedang dilaksanakan . Apabila super() dilaksanakan, ia menunjuk kepada pembina subkelas B, bukan pembina kelas induk A. Maksudnya, dalam super() ini menunjuk kepada B

Apabila super digunakan sebagai fungsi, ia mesti muncul dalam pembinaan subkelas dalam pembina fungsi, jika tidak, ralat akan dilaporkan

class A {}
class B extends A {
  m() {
    super(); // 报错
  }
}
Salin selepas log masuk

Kes kedua: apabila super digunakan sebagai objek, dalam kaedah biasa , ia menunjuk kepada objek prototaip kelas induk, dan dalam kaedah statik, ia menunjuk kepada kelas induk

class A {
  p() {
    return 2;
  }
}
class B extends A {
  constructor() {
    super();//父类的构造函数
    console.log(super.p()); // 2
  }
}
let b = new B();
Salin selepas log masuk

Dalam kod di atas, apabila super digunakan sebagai fungsi, ia mewakili kaedah pembinaan kelas induk Apabila digunakan sebagai objek, ia menunjuk ke objek prototaip kelas induk, iaitu, A.prototype, jadi super.p() adalah setara Berkenaan A.prototype.p()

, perlu juga diambil perhatian bahawa memandangkan super menunjuk kepada prototaip kelas induk, atribut atau kaedah pada contoh kelas induk tidak boleh dipanggil melalui super

class A {
  constructor() {
    this.p = 2;
  }
}
class B extends A {
  get m() {
    return super.p;
  }
}
let b = new B();
b.m // undefined
Salin selepas log masuk

Dalam kod di atas, p ialah atribut bagi contoh kelas induk A dan super.p tidak boleh merujuknya

Jika atribut ditakrifkan pada prototaip kelas induk, ia boleh diakses menggunakan super

class A {}
A.prototype.x = 2;
class B extends A {
  constructor() {
    super();
    console.log(super.x) // 2
  }
}
let b = new B();
Salin selepas log masuk

Dalam kod di atas, atribut x ditakrifkan pada objek prototaip kelas induk, jadi anda boleh menggunakan super 🎜>bahagian hadapan web

Atas ialah kandungan terperinci Apakah kegunaan super dalam es6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
es6
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan