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.
Persekitaran pengendalian tutorial ini: sistem Windows 10, ECMAScript versi 6.0, komputer Dell G3.
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函数,代表父类的构造函数 } }
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
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(); // 报错 } }
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();
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
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();
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!