Ich suchte nach etwas Ähnlichem. Keine der Antworten gegeben wirklich gefiel mir, so hatte ich endlich einen Riss an es selbst ...
http://jsfiddle.net/tn9upue0/1/
Beispiel Klassen
- $ .Animal() erzeugt ein generisches Tier , mit einem Standardwert von 4 Beinen, dass kann ein Name in seinen Optionen übergeben werden, und kann sich selbst beschreiben. $ .Dog() ist eine Unterklasse von Animal, die "woof" lautet und möglicherweise einige Tricks kennt. $ .Cat() ist eine Unterklasse von Animal, die "miau" geht. $ .Bird() ist eine Unterklasse von Animal, die 2 Beine hat und "tweet" geht.
Klasse Implementierung
- Jedes Tier Unterklasse erstellt eine Instanz von $ .Animal Eltern genannt, , die später verwendet werden können Methoden der Eltern zu nennen. Beim Aufrufen einer übergeordneten Methode kann der Kontext wichtig sein. Wenn dies der Fall ist, sollte die Methode über $ .proxy() aufgerufen werden, wobei dies als Kontext übergeben wird.
Beispiel Ausgabe
Mein Name ist unbekannt. Ich bin ein Tier mit 4 Beinen.
Mein Name ist Rover. Ich bin ein Tier mit 4 Beinen. Ich sage "Wau". Ich kann sitzen, bleiben und mich umdrehen.
Mein Name ist Fäustlinge. Ich bin ein Tier mit 4 Beinen. Ich sage "Miau".
Mein Name ist unbekannt. Ich bin ein Tier mit 2 Beinen. Ich sage "tweeten".
Beispielcode
$.Animal = function (options) {
return {
options: options || {},
_getName: function() {
return this.options.name || 'unknown';
},
_getLegs: function() {
return 4;
},
describe: function() {
return 'My name is ' + this._getName() + '. I am an animal with ' + this._getLegs() + ' legs.';
}
}
};
$.Dog = function (options) {
var parent = $.Animal(options);
return $.extend({}, parent, {
describe: function() {
var s = $.proxy(parent.describe, this)() + ' I say "woof".';
if (this.options.tricks) {
s += ' I can ' + this.options.tricks + '.';
}
return s;
}
});
};
$.Cat = function (options) {
var parent = $.Animal(options);
return $.extend({}, parent, {
describe: function() {
return $.proxy(parent.describe, this)() + ' I say "meow".';
}
});
};
$.Bird = function (options) {
var parent = $.Animal(options);
return $.extend({}, parent, {
_getLegs: function() {
return 2;
},
describe: function() {
return $.proxy(parent.describe, this)() + ' I say "tweet".';
}
});
};
var animal = $.Animal(),
rover = $.Dog({name: 'Rover', tricks: 'sit, stay, and roll over'}),
mittens = $.Cat({name: 'Mittens'}),
bird = $.Bird();
$('#out').html(
animal.describe() + '<br>' +
rover.describe() + '<br>' +
mittens.describe() + '<br>' +
bird.describe()
);
Suche nach einem Weg dies zu tun, keine der Antworten befriedigt mich. Ich biete unten eine alternative jQuery-Lösung an, die $ .extend und $ .proxy nutzt. – xtempore