Saya tidak faham apakah perbezaan penting antara dua cara penulisan berikut?
function Person() {
}
Person.prototype.age = function(n) {
return n;
}
var person = new Person();
person.age(9);
Kaedah penulisan di atas menggunakan prototaip untuk membenarkan objek yang di instantiated memanggil fungsi kelas induk.
Kaedah berikut tidak melepasi prototaip, tetapi ia betul-betul sama dalam penggunaan.
function Person() {
this.age = function(n) {
return n;
}
}
var person = new Person();
person.age(9);
Jadi dalam aspek apakah kedua-duanya boleh dibandingkan? Mohon nasihat, terima kasih!
Terdapat perbezaan dalam penjimatan memori
Cara pertama ialah definisi prototye Semua keturunan berkongsi definisi kaedah dan hanya menduduki satu ruang dalam ingatan Tidak kira berapa banyak kejadian yang anda buat, kaedah umur semua kejadian menunjukkan alamat memori ini.
Kaedah kedua ditakrifkan dalam pembina Setiap kali tika dibuat, takrifan kaedah umur akan memperuntukkan ruang yang eksklusif untuk tika itu. Apabila lebih banyak kejadian dicipta, ingatan meningkat secara berkadar.
Ringkasnya, jika ia kaedah biasa, sila masukkan ke dalam prototaip.
Cara penulisan kedua ialah corak konstruktor, yang mudah digunakan, tetapi masalah utama kaedah ini ialah setiap kaedah mesti dicipta semula pada setiap contoh.
Pendekatan corak prototaip pertama menyelesaikan masalah ini dengan membenarkan semua kejadian objek berkongsi sifat dan kaedah yang terkandung di dalamnya.
Ringkasnya, fungsinya adalah sama, kecuali dalam kebanyakan kes kaedah ditulis dalam prototaip dan sifat ditulis dalam pembina, jadi kaedah pertama lebih biasa digunakan