Saya lebih suka menggunakan Daniel X. Moore's {SUPER: SYSTEM}
. Ini adalah disiplin yang memberikan manfaat seperti variabel instance benar, pewarisan berbasis sifat, hierarki kelas, dan opsi konfigurasi. Contoh di bawah ini mengilustrasikan penggunaan variabel instan yang benar, yang saya percaya adalah keuntungan terbesar. Jika Anda tidak memerlukan variabel instan dan senang dengan hanya variabel publik atau pribadi, maka mungkin ada sistem yang lebih sederhana.
function Person(I) {
I = I || {};
Object.reverseMerge(I, {
name: "McLovin",
age: 25,
homeState: "Hawaii"
});
return {
introduce: function() {
return "Hi I'm " + I.name + " and I'm " + I.age;
}
};
}
var fogel = Person({
age: "old enough"
});
fogel.introduce(); // "Hi I'm McLovin and I'm old enough"
Wow, itu tidak terlalu berguna untuknya sendiri, tetapi lihatlah menambahkan subclass:
function Ninja(I) {
I = I || {};
Object.reverseMerge(I, {
belt: "black"
});
// Ninja is a subclass of person
return Object.extend(Person(I), {
greetChallenger: function() {
return "In all my " + I.age + " years as a ninja, I've never met a challenger as worthy as you...";
}
});
}
var resig = Ninja({name: "John Resig"});
resig.introduce(); // "Hi I'm John Resig and I'm 25"
Keuntungan lain adalah kemampuan untuk memiliki modul dan warisan berbasis sifat.
// The Bindable module
function Bindable() {
var eventCallbacks = {};
return {
bind: function(event, callback) {
eventCallbacks[event] = eventCallbacks[event] || [];
eventCallbacks[event].push(callback);
},
trigger: function(event) {
var callbacks = eventCallbacks[event];
if(callbacks && callbacks.length) {
var self = this;
callbacks.forEach(function(callback) {
callback(self);
});
}
},
};
}
Contoh memiliki kelas orang termasuk modul bindable.
function Person(I) {
I = I || {};
Object.reverseMerge(I, {
name: "McLovin",
age: 25,
homeState: "Hawaii"
});
var self = {
introduce: function() {
return "Hi I'm " + I.name + " and I'm " + I.age;
}
};
// Including the Bindable module
Object.extend(self, Bindable());
return self;
}
var person = Person();
person.bind("eat", function() {
alert(person.introduce() + " and I'm eating!");
});
person.trigger("eat"); // Blasts the alert!
Pengungkapan: Saya adalah Daniel X. Moore dan ini adalah milik saya {SUPER: SYSTEM}
. Ini adalah cara terbaik untuk mendefinisikan kelas dalam JavaScript.