Ich bevorzuge das Buch von Daniel X. Moore {SUPER: SYSTEM}
. Dies ist eine Disziplin, die Vorteile wie echte Instanzvariablen, traitbasierte Vererbung, Klassenhierarchien und Konfigurationsoptionen bietet. Das nachstehende Beispiel veranschaulicht die Verwendung echter Instanzvariablen, was meiner Meinung nach der größte Vorteil ist. Wenn Sie keine Instanzvariablen benötigen und sich mit öffentlichen oder privaten Variablen begnügen, gibt es wahrscheinlich einfachere Systeme.
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, das ist für sich genommen nicht wirklich nützlich, aber sehen Sie sich das Hinzufügen einer Unterklasse an:
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"
Ein weiterer Vorteil ist die Möglichkeit, Module und die Vererbung von Eigenschaften zu nutzen.
// 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);
});
}
},
};
}
Ein Beispiel dafür, dass die Personenklasse das bindungsfähige Modul enthält.
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!
Offenlegung: Ich bin Daniel X. Moore und dies ist meine {SUPER: SYSTEM}
. Es ist der beste Weg, um eine Klasse in JavaScript zu definieren.
1 Stimmen
Hinweis: Dies ist ein Duplikat von stackoverflow.com/questions/355848
3 Stimmen
Ich persönlich mag es, Klassenmitglieder innerhalb des Funktionskörpers zu deklarieren. Ich verwende die Technik des "Fixierens des This", um einen Abschluss zu erstellen, der sich mehr wie eine Klasse verhält. Ich habe ein ausführliches Beispiel in meinem Blog: ncombo.wordpress.com/2012/12/30/
1 Stimmen
Ich habe die meisten C++ OOP-Funktionen mit einer einfachen und natürlichen Syntax auf JavaScript portiert. Siehe meine Antwort hier: stackoverflow.com/a/18239463/1115652
0 Stimmen
In JavaScript gibt es keine Klassen. Aber wenn Sie ein klassenähnliches Verhalten in JS simulieren wollen, können Sie das. Siehe Details in: symfony-world.blogspot.com/2013/10/
1 Stimmen
Mögliches Duplikat von Wie kann ich "Klassen" in JavaScript nachbilden? (mit oder ohne eine Bibliothek eines Drittanbieters)
0 Stimmen
Ein einfacher Ansatz zur Definition einer Javascript-Klasse mit Javascript-Objekten: wapgee.com/story/i/203
0 Stimmen
Beachten Sie, dass diese Frage seit 2015 direkt mit den nativen Klassenfunktionen behandelt wird. Siehe developer.mozilla.org/de-US/docs/Web/JavaScript/Reference/
0 Stimmen
@karim Der Link zu dem Artikel, den Sie in Ihrer Frage erwähnen, ist defekt.