Dalam JS, __proto__ dan prototaip ialah dua atribut yang berkaitan dengan prototaip, dan ia mempunyai fungsi yang sedikit berbeza. Artikel ini akan memperkenalkan dan membandingkan perbezaan antara kedua-duanya secara terperinci, dan memberikan contoh kod yang sepadan.
Pertama, mari kita fahami maksud dan kegunaannya.
__proto__ ialah sifat terbina dalam objek, yang digunakan untuk menunjuk kepada prototaip objek. Setiap objek mempunyai atribut __proto__, termasuk objek tersuai, objek terbina dalam dan objek fungsi. Melalui atribut __proto__, kita boleh mengakses dan memanipulasi rantai prototaip objek.
Mari kita lihat contoh:
let obj = {}; console.log(obj.__proto__); // 输出:Object {} let arr = []; console.log(arr.__proto__); // 输出:Array [] function func() {} console.log(func.__proto__); // 输出:[Function]
Dalam kod di atas, kami mencipta obj objek kosong dan mengakses atribut __proto__nya. Seperti yang anda boleh lihat, obj.__proto__ menghala ke objek{} Objek. Begitu juga, kami juga mencipta arr tatasusunan kosong dan mengakses atribut __proto__ Hasilnya ialah arr.__proto__ menghala ke objek Array[]. Untuk fungsi objek fungsi, __proto__nya menghala ke objek [Fungsi].
Untuk meringkaskan, atribut __proto__ digunakan untuk menunjuk kepada prototaip objek, yang melaluinya kita boleh mengakses dan mengendalikan rantai prototaip.
prototaip ialah atribut unik objek fungsi, yang menunjuk kepada objek prototaip. Setiap objek fungsi mempunyai atribut prototaip, tetapi ia hanya bermakna jika fungsi itu digunakan sebagai pembina.
Mari kita lihat contoh:
function Person() {} console.log(Person.prototype); // 输出:Person {}
Dalam kod di atas, kami mentakrifkan objek fungsi Person dan mengakses atribut prototaipnya. Seperti yang anda boleh lihat, Person.prototype menghala ke objek{} Person.
Fungsi utama atribut prototaip adalah untuk membina rantaian prototaip objek contoh dalam mod pembina. Apabila kita menggunakan pembina untuk mencipta objek, atribut __proto__nya menunjuk kepada atribut prototaip pembina.
let person = new Person(); console.log(person.__proto__ === Person.prototype); // 输出:true
Dalam kod di atas, kami menggunakan pembina Orang untuk mencipta orang objek. Ternyata orang itu.__proto__ menunjuk ke Person.prototype.
__proto__ dan prototaip kedua-duanya berkaitan dengan prototaip objek. Sambungan dan perbezaan antara mereka adalah seperti berikut:
Contoh kod berikut digunakan untuk menggambarkan lagi perbezaan dan perkaitan antara keduanya:
function Animal() {} Animal.prototype.eat = function() { console.log("Animal is eating"); }; function Dog() {} Dog.prototype = Object.create(Animal.prototype); Dog.prototype.bark = function() { console.log("Dog is barking"); }; const dog1 = new Dog(); dog1.eat(); // 输出:Animal is eating dog1.bark(); // 输出:Dog is barking console.log(dog1.__proto__ === Dog.prototype); // 输出:true console.log(Dog.prototype.__proto__ === Animal.prototype); // 输出:true
Dalam kod di atas, kami mencipta hubungan warisan dengan mentakrifkan pembina Haiwan dan pembina Anjing. Melalui atribut __proto__ dan prototaip, kita boleh mengakses rantaian prototaip objek dan membuktikan hubungan antara mereka.
Ringkasnya, __proto__ dan prototaip kedua-duanya berkaitan dengan prototaip dalam JS, tetapi ia berbeza dari segi fungsi dan penggunaan. Memahami perbezaan mereka boleh membantu kami memahami dengan lebih baik mekanisme prototaip dalam JS dan menggunakannya dengan lebih fleksibel semasa menulis kod.
Atas ialah kandungan terperinci Perbezaan antara __proto__ dan prototaip dalam JS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!