В Douglas Crockford JavaScript: The Good Parts он рекомендует использовать функциональное наследование. Вот пример:
var mammal = function(spec, my) {
var that = {};
my = my || {};
// Protected
my.clearThroat = function() {
return "Ahem";
};
that.getName = function() {
return spec.name;
};
that.says = function() {
return my.clearThroat() + ' ' + spec.saying || '';
};
return that;
};
var cat = function(spec, my) {
var that = {};
my = my || {};
spec.saying = spec.saying || 'meow';
that = mammal(spec, my);
that.purr = function() {
return my.clearThroat() + " purr";
};
that.getName = function() {
return that.says() + ' ' + spec.name + ' ' + that.says();
};
return that;
};
var kitty = cat({name: "Fluffy"});
Основная проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я создаю mammal
или cat
, интерпретатор JavaScript должен перекомпилировать все функции в нем. То есть вы не можете делиться кодом между экземплярами.
Мой вопрос: как сделать этот код более эффективным? Например, если я делал тысячи объектов cat
, что лучший способ изменить этот шаблон, чтобы использовать объект prototype
?