Rumah >hujung hadapan web >tutorial js >Memahami Warisan Prototaip JavaScript - Panduan Pembangun
Hai rakan-rakan dev! Selepas bertahun-tahun bekerja dengan warisan berasaskan kelas PHP, menyelam ke dalam warisan prototaip JavaScript terasa seperti belajar menulis dengan tangan kiri saya. Hari ini, saya ingin berkongsi apa yang telah saya pelajari tentang pendekatan unik terhadap warisan yang menjadikan JavaScript istimewa.
Tidak seperti PHP atau Java di mana kami bekerja dengan kelas, JavaScript menggunakan prototaip. Setiap objek dalam JavaScript mempunyai pautan dalaman ke objek lain yang dipanggil "prototaip". Anggap ia sebagai mekanisme sandaran - apabila anda cuba mengakses sifat yang tidak wujud dalam objek, JavaScript mencarinya dalam prototaip objek.
const pet = { makeSound() { return "Some generic sound"; } }; const cat = { purr() { return "Purrrr"; } }; // Set pet as the prototype of cat Object.setPrototypeOf(cat, pet); // Now cat can use methods from pet console.log(cat.makeSound()); // "Some generic sound" console.log(cat.purr()); // "Purrrr"
Di sinilah ia menjadi menarik. Prototaip boleh mempunyai prototaip sendiri, membentuk apa yang kita panggil "rantai prototaip". JavaScript akan terus mencari rantai ini sehingga ia menemui apa yang diperlukannya atau mencapai prototaip nol.
const animal = { eat() { return "Nom nom nom"; } }; const pet = { makeSound() { return "Some generic sound"; } }; const cat = { purr() { return "Purrrr"; } }; Object.setPrototypeOf(pet, animal); Object.setPrototypeOf(cat, pet); // cat can now access methods from both pet and animal console.log(cat.purr()); // "Purrrr" console.log(cat.makeSound()); // "Some generic sound" console.log(cat.eat()); // "Nom nom nom"
Jika anda datang daripada bahasa berasaskan kelas seperti PHP, anda mungkin mendapati corak pembina lebih biasa:
function Animal(name) { this.name = name; } Animal.prototype.eat = function() { return `${this.name} is eating`; }; function Cat(name) { Animal.call(this, name); } // Set up inheritance Cat.prototype = Object.create(Animal.prototype); Cat.prototype.constructor = Cat; Cat.prototype.purr = function() { return `${this.name} says purrrr`; }; const felix = new Cat("Felix"); console.log(felix.eat()); // "Felix is eating" console.log(felix.purr()); // "Felix says purrrr"
ES6 memperkenalkan sintaks kelas, yang mungkin kelihatan biasa kepada pembangun PHP. Tetapi jangan tertipu - ia hanya gula sintaktik berbanding warisan prototaip:
class Animal { constructor(name) { this.name = name; } eat() { return `${this.name} is eating`; } } class Cat extends Animal { purr() { return `${this.name} says purrrr`; } } const felix = new Cat("Felix");
Selepas bertahun-tahun bekerja dengan PHP dan JavaScript, berikut ialah beberapa petua yang saya pelajari:
Memahami warisan prototaip mungkin berasa pelik pada mulanya, terutamanya jika anda datang dari PHP atau Java. Tetapi sebaik sahaja ia mengklik, anda akan menghargai fleksibiliti dan kuasanya. Ini adalah salah satu ciri JavaScript yang membuatkan anda berfikir secara berbeza tentang pengaturcaraan berorientasikan objek.
Adakah anda menghadapi sebarang cabaran menarik dengan pewarisan JavaScript? Letakkan ulasan di bawah - Saya ingin mendengar cerita anda!
Atas ialah kandungan terperinci Memahami Warisan Prototaip JavaScript - Panduan Pembangun. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!