Szukałem czegoś podobnego. Żadna z odpowiedzi udzielonych naprawdę przypadła mi do gustu, więc w końcu miał pęknięcia w niej siebie ...
http://jsfiddle.net/tn9upue0/1/
Przykładowe klasy
- $ .Animal() tworzy zwierzę rodzajowe , z domyślnymi 4 nogami, że można podać nazwę w jego opcjach i może opisać siebie. $ .Dog() jest podklasą Animal, która idzie "woof" i może znać pewne sztuczki . $ .Cat() jest podklasą Animal, która brzmi "miau". $ .Bird() to podklasa Animal, która ma 2 nogi i przechodzi "tweet".
implementacja klasy
- Każda podklasa zwierzę tworzy instancję o nazwie $ .Animal rodzica, które mogą być wykorzystane później zadzwonić metody rodzica. Podczas wywoływania metody nadrzędnej może być ważny kontekst. W takim przypadku należy wywołać metodę $ .proxy(), przekazując ją jako kontekst.
Przykâadowa
Nazywam jest nieznany. Jestem zwierzęciem z 4 nogami.
Nazywam się Rover. Jestem zwierzęciem z 4 nogami. Mówię "woof". Mogę usiąść, zostać i przewrócić się.
Nazywam się mitenki. Jestem zwierzęciem z 4 nogami. Mówię "miau".
Moje nazwisko nie jest znane. Jestem zwierzęciem z 2 nogami. Mówię "tweet".
Przykładowy kod
$.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()
);
szuka sposobu, aby to zrobić też żaden z przewidzianych odpowiedzi spełnione mnie. Poniżej przedstawiam alternatywne rozwiązanie jQuery, które wykorzystuje $ .extend i $ .proxy. – xtempore