Ini adalah cara asal saya menulisnya:
function Dog(){ this.name = 'hachi'; } Dog.prototype = { makeNoise:function(){ alert('wangwangwang'); } };
Kemudian saya melihat cara penulisan lain yang sedikit lebih rumit dan kelihatan tidak perlu:
function Dog(){ var privateVariable = 'secret'; var fn = function(){ //... } fn.prototype = { makeNoise:function(){ alert('wangwangwang'); } } return fn; }
Fungsi Anjing di sini sebenarnya ialah fungsi membuat kelas, yang mengembalikan kelas Anjing sebenar.
Saya merasakan bahawa kelebihan melakukan ini adalah enkapsulasi yang lebih baik.
Contohnya, privateVariable di sini ialah pembolehubah peribadi:
var d = new Dog; d.privateVariable //undefined
Selain itu, jika anda menambah ayat pada penghujung contoh pertama:
Dog.prototype = { //e...WTF?? }
Dengan cara ini Anjing bukan lagi Anjing~
Pemahaman kemudian:
Kaedah di atas untuk mencipta kelas baharu secara langsung mengatasi objek prototaip. Dengan cara ini, sifat terbina dalam asal prototaip telah hilang (hujah, panggilan, memohon, dll.).
Kaedah berikut untuk mencipta kelas baharu nampaknya lebih baik:
var Dog = function(name){ this.name = name; var privateVariable = 'you cannot see me.'; this.getPrivate = function(){return privateVariable;}; }