Daniel X. Moore'u kullanmayı tercih ederim {SUPER: SYSTEM}
. Bu, gerçek örnek değişkenleri, özellik tabanlı kalıtım, sınıf hiyerarşileri ve yapılandırma seçenekleri gibi faydalar sağlayan bir disiplindir. Aşağıdaki örnek, en büyük avantaj olduğunu düşündüğüm gerçek örnek değişkenlerinin kullanımını göstermektedir. Örnek değişkenlere ihtiyacınız yoksa ve yalnızca genel veya özel değişkenlerden memnunsanız, muhtemelen daha basit sistemler vardır.
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"
Vay be, bu tek başına çok kullanışlı değil, ancak bir alt sınıf eklemeye bir göz atın:
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"
Diğer bir avantaj modül ve özellik tabanlı kalıtım yeteneğidir.
// 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);
});
}
},
};
}
Kişi sınıfına örnek olarak, çiftlenebilir modül verilebilir.
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!
Açıklama: Ben Daniel X. Moore'um ve bu benim {SUPER: SYSTEM}
. JavaScript'te bir sınıf tanımlamanın en iyi yoludur.