Существует много информации о композиции и наследовании онлайн, но я не нашел достойных примеров с JavaScript. Используя приведенный ниже код для демонстрации наследования:
function Stock( /* object with stock names and prices */ ) {
for (var company_name in arguments[0]) {
// copy the passed object into the new object created by the constructor
this[company_name] = arguments[0][company_name];
}
}
// example methods in prototype, their implementation is probably redundant for
// this question, but list() returns an array with toString() invoked; total()
// adds up the stock prices and returns them. Using ES5 feature to make
// inherited properties non-enumerable
Stock.prototype = {
list: function () {
var company_list = [];
for (var company_name in this)
company_list.push(company_name);
return company_list.toString();
},
total: function () {
var price_total = 0;
for (var company_name in this)
price_total += this[company_name];
return '$' + price_total;
}
};
Object.defineProperties(Stock.prototype, {
list: { enumerable: false },
total: { enumerable:false }
});
var portfolio = new Stock({ MSFT: 25.96, YHOO: 16.13, AMZN: 173.10 });
portfolio.list(); // MSFT,YHOO,AMZN
portfolio.total(); // $215.19
(Чтобы сделать код меньше, вы можете исключить реализации метода, например: Stock.total = function(){ /* code */ }
Я просто помещаю их туда, чтобы быть фантастическим). Если композиция пользуется большим количеством ситуаций в ООП, почему большинство людей, использующих JavaScript, похоже, используют только прототипы и наследование? Я не нашел много информации о составе в JavaScript онлайн, только на других языках.
Может ли кто-нибудь дать мне пример, используя приведенный выше код, чтобы продемонстрировать состав и агрегацию?