저는 Daniel X. Moore 's를 선호합니다 {SUPER: SYSTEM}
. 이는 실제 인스턴스 변수, 특성 기반 상속, 클래스 계층 및 구성 옵션과 같은 이점을 제공하는 학문입니다. 아래 예제는 실제 인스턴스 변수의 사용을 보여줍니다. 이것이 가장 큰 장점이라고 생각합니다. 인스턴스 변수가 필요하지 않고 공개 또는 개인 변수에만 만족하면 더 간단한 시스템이있을 수 있습니다.
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"
와우, 그것은 실제로 그다지 유용하지는 않지만 서브 클래스를 추가하는 것을 살펴보십시오.
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"
또 다른 장점은 모듈과 특성 기반 상속 기능입니다.
// 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);
});
}
},
};
}
person 클래스를 갖는 예에는 바인딩 가능한 모듈이 있습니다.
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!
공개 : 저는 Daniel X. Moore {SUPER: SYSTEM}
입니다. JavaScript로 클래스를 정의하는 가장 좋은 방법입니다.