Tôi thích sử dụng Daniel X. Moore {SUPER: SYSTEM}
. Đây là một môn học cung cấp các lợi ích như các biến thể hiện thực, kế thừa dựa trên đặc điểm, phân cấp lớp và các tùy chọn cấu hình. Ví dụ dưới đây minh họa việc sử dụng các biến thể hiện thực, mà tôi tin là lợi thế lớn nhất. Nếu bạn không cần các biến thể hiện và chỉ hài lòng với các biến công khai hoặc riêng tư thì có lẽ có các hệ thống đơn giản hơn.
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"
Ồ, điều đó thực sự không hữu ích lắm, nhưng hãy xem thêm một lớp con:
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"
Một lợi thế khác là khả năng có các mô-đun và tính kế thừa dựa trên đặc điểm.
// 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);
});
}
},
};
}
Một ví dụ về việc có lớp người bao gồm mô-đun ràng buộc.
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!
Tiết lộ: Tôi là Daniel X. Moore và đây là của tôi {SUPER: SYSTEM}
. Đây là cách tốt nhất để định nghĩa một lớp trong JavaScript.