Gaya penulisan asli saya seperti ini:
function dog () {this.name = 'hachi';} dog.prototype = {makeNoise: function () {alert ('wangwangwang'); }};Kemudian saya melihat metode penulisan lain yang lebih rumit dan tampaknya tidak perlu:
function dog () {var privatevariable = 'Secret'; var fn = function () {// ...} fn.prototype = {MakeNoise: function () {alert ('wangwangwang'); }} return fn;}Fungsi anjing di sini sebenarnya adalah fungsi yang memproduksi kelas, yang mengembalikan kelas anjing asli.
Saya merasa bahwa manfaat dari melakukan ini adalah untuk mengimplementasikan enkapsulasi dengan lebih baik.
Misalnya, privatevariable di sini adalah variabel pribadi:
var d = anjing baru; d.privatevariable // tidak ditentukan
Juga, jika Anda menambahkan kalimat di akhir contoh pertama:
Dog.prototype = {//e...wtf ??}Anjing bukan anjing seperti ini
Pemahaman nanti:
Metode di atas untuk membuat kelas baru secara langsung menulis ulang objek prototipe. Dengan cara ini, sifat prototipe bawaan akan hilang (argumen, panggilan, berlaku, dll.).
Metode pembuatan kelas baru berikut tampaknya lebih baik:
var dog = function (name) {this.name = name; var privatevariable = 'Anda tidak dapat melihat saya.'; this.getprivate = function () {return privatevariable;};}