Rumah hujung hadapan web tutorial js 基于JavaScript实现继承机制之原型链(prototype chaining)的详解_javascript技巧

基于JavaScript实现继承机制之原型链(prototype chaining)的详解_javascript技巧

May 16, 2016 pm 05:34 PM
rantai prototaip

如果用原型方式重定义前面例子中的类,它们将变为下列形式:

复制代码 代码如下:

function ClassA() {
}

ClassA.prototype.color = "blue";
ClassA.prototype.sayColor = function () {
    alert(this.color);
};

function ClassB() {
}

ClassB.prototype = new ClassA();


原型方式的神奇之处在于最后一行代码。这里,把 ClassB 的 prototype 属性设置成 ClassA 的实例。这很有意思,因为想要 ClassA 的所有属性和方法,但又不想逐个将它们 添加到ClassB 的 prototype 属性。还有比把 ClassA 的实例赋予 prototype 属性更好的方法吗?

注意:调用 ClassA 的构造函数,没有给它传递参数。这在原型链中是标准做法。要确保构造函数没有任何参数。

与对象冒充相似,子类的所有属性和方法都必须出现在 prototype 属性被赋值后,因为在它之前赋值的所有方法都会被删除。为什么?因为 prototype 属性被替换成了新对象,添加了新方法的原始对象将被销毁。所以,为 ClassB 类添加 name 属性和 sayName() 方法的代码如下:

复制代码 代码如下:

function ClassB() {
}

ClassB.prototype = new ClassA();

ClassB.prototype.name = "";
ClassB.prototype.sayName = function () {
    alert(this.name);
};


可通过运行下面的例子测试这段代码:
复制代码 代码如下:

var objA = new ClassA();
var objB = new ClassB();
objA.color = "blue";
objB.color = "red";
objB.name = "John";
objA.sayColor();
objB.sayColor();
objB.sayName();

此外,在原型链中,instanceof 运算符的运行方式也很独特。对 ClassB 的所有实例,instanceof 为 ClassA 和 ClassB 都返回 true。例如:
复制代码 代码如下:

var objB = new ClassB();
alert(objB instanceof ClassA);    //输出 "true"
alert(objB instanceof ClassB);    //输出 "true"

在 ECMAScript 的弱类型世界中,这是极其有用的工具,不过使用对象冒充时不能使用该方法判断。但是由于子类的原型被直接重新赋值,所以出现以下这种情况:
复制代码 代码如下:

console.log(objB.__proto__===objB.constructor.prototype)   //false

因为ClassB的原型链 prototype 属性被另一个类的对象重写了。输出结果可以看出objB.__proto__仍然指向的是ClassB.prototype,而不是objB.constructor.prototype。这也很好理解,给Person.prototype赋值的是一个对象直接量new ClassA()实例,使用对象直接量方式定义的对象其构造器(constructor)指向的是根构造器Object,Object.prototype是一个空对象{},{}自然与ClassB.prototype不等。
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah prototaip dan rantai prototaip Apakah prototaip dan rantai prototaip Nov 09, 2023 pm 05:59 PM

Prototaip, objek dalam js, digunakan untuk menentukan sifat dan kaedah objek lain. Setiap pembina mempunyai atribut prototaip atribut prototaip pembinanya mewarisi sifat dan kaedah. Rantaian prototaip, apabila cuba mengakses sifat objek, js akan menyemak sama ada objek mempunyai sifat ini Jika tidak, maka js akan beralih kepada prototaip objek Jika objek prototaip tidak mempunyai sifat ini terus mencari prototaip prototaip.

Apakah rantai skop dan rantai prototaip? Apakah rantai skop dan rantai prototaip? Nov 13, 2023 pm 01:46 PM

Rantaian skop dan rantaian prototaip ialah dua konsep penting dalam JavaScript, sepadan dengan dua ciri teras skop dan warisan masing-masing: 1. Rantaian skop ialah mekanisme yang digunakan untuk mengurus capaian dan skop berubah dalam JavaScript Ia dibentuk oleh konteks pelaksanaan dan skop leksikal di mana fungsi dicipta; Definisi, akan dicari di sepanjang rantaian prototaip.

Apakah perbezaan antara rantai prototaip dan prototaip Apakah perbezaan antara rantai prototaip dan prototaip Nov 09, 2023 pm 04:48 PM

Perbezaan antara rantaian prototaip dan prototaip ialah: 1. Prototaip ialah atribut yang dimiliki oleh setiap objek, termasuk beberapa atribut dan kaedah yang dikongsi, yang digunakan untuk merealisasikan perkongsian dan pewarisan atribut dan kaedah antara objek, manakala rantaian prototaip ialah pewarisan. mekanisme dilaksanakan melalui hubungan prototaip antara objek, yang mentakrifkan hubungan warisan antara objek supaya objek boleh berkongsi sifat dan kaedah objek prototaip 2. Fungsi prototaip adalah untuk menentukan sifat dan kaedah yang dikongsi objek, supaya berbilang Objek boleh berkongsi sifat dan kaedah objek prototaip yang sama, dan fungsi rantai prototaip adalah untuk merealisasikan hubungan warisan antara objek, dsb.

Apakah tujuan prototaip dan rantai prototaip? Apakah tujuan prototaip dan rantai prototaip? Jan 13, 2024 pm 12:58 PM

Sebab mengapa prototaip dan rantai prototaip wujud adalah untuk melaksanakan pewarisan dan perkongsian sifat objek dalam bahasa JavaScript. Dalam JavaScript, semuanya adalah objek, termasuk fungsi. Setiap objek mempunyai sifat yang dipanggil prototaip yang menunjuk ke objek lain, yang dipanggil objek prototaip. Objek boleh mewarisi sifat dan kaedah daripada objek prototaip. Faedah melaksanakan sifat dan kaedah yang dikongsi melalui prototaip ialah penjimatan memori. Pertimbangkan objek A, yang mempunyai beberapa sifat dan kaedah, kemudian buat objek B dan buat

Apakah rantai prototaip dalam es6 Apakah rantai prototaip dalam es6 Nov 15, 2022 pm 07:28 PM

Rantaian prototaip, secara mudah difahami ialah rantai yang terdiri daripada prototaip. Apabila mengakses atribut objek, ia akan mencari pada atribut objek itu sendiri Jika ia tidak dijumpai, ia akan mencari pada prototaip tersirat __proto__, iaitu, prototaip pembinanya namun, Ia kemudiannya akan mencari dalam __proto__ prototaip pembina Dengan cara ini, mencari lapisan atas demi lapisan akan membentuk struktur rantai, yang dipanggil rantaian prototaip.

Perbincangan mendalam: Analisis peranan prototaip dan rantai prototaip dalam pengaturcaraan berorientasikan objek Perbincangan mendalam: Analisis peranan prototaip dan rantai prototaip dalam pengaturcaraan berorientasikan objek Jan 11, 2024 am 11:59 AM

Analisis mendalam: Peranan rantai prototaip dan prototaip dalam pengaturcaraan berorientasikan objek memerlukan contoh kod khusus Dalam pengaturcaraan berorientasikan objek (OOP), prototaip (Prototaip) dan rantaian prototaip (PrototypeChain) adalah konsep penting. Mereka menyediakan mekanisme penggunaan semula kod berasaskan objek dan memainkan peranan penting dalam bahasa seperti Javascript. Dalam artikel ini, kita akan mendalami konsep prototaip dan rantaian prototaip, meneroka peranannya dalam OOP dan menggambarkan dengan contoh kod konkrit

Apakah fungsi prototaip js dan rantai prototaip Apakah fungsi prototaip js dan rantai prototaip Nov 09, 2023 pm 04:56 PM

Fungsi rantai prototaip dan prototaip js adalah untuk merealisasikan pewarisan objek, menjimatkan ruang memori, dan meningkatkan prestasi dan kebolehselenggaraan kod. Pengenalan terperinci: 1. Laksanakan pewarisan objek Prototaip dan rantaian prototaip membolehkan anda mencipta objek dan mewarisi sifat dan kaedah objek lain Apabila anda mencipta objek baharu, anda boleh mengarahkan prototaipnya ke objek lain, supaya objek baru Objek boleh mengakses sifat dan kaedah pada objek prototaip 2. Menjimatkan memori dan meningkatkan prestasi Dalam JavaScript, setiap objek mempunyai prototaip, objek boleh berkongsi prototaip dan sebagainya.

Terokai keistimewaan prototaip dan rantai prototaip Terokai keistimewaan prototaip dan rantai prototaip Jan 13, 2024 pm 03:50 PM

Meneroka ciri unik prototaip dan rantaian prototaip Dalam JavaScript, prototaip dan rantaian prototaip adalah konsep yang sangat penting. Memahami ciri unik prototaip dan rantaian prototaip boleh membantu kami memahami dengan lebih baik warisan dan penciptaan objek dalam JavaScript. Prototaip ialah harta yang dimiliki oleh setiap objek dalam JavaScript yang menunjuk ke objek lain dan digunakan untuk berkongsi sifat dan kaedah. Setiap objek JavaScript mempunyai prototaip

See all articles