В Интернете много информации о композиции и наследовании, но я не нашел достойных примеров на 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(){ /* код */ }
Я просто вставил их туда, чтобы быть модным). Если композиция является предпочтительной для многих ситуаций в ООП, почему большинство людей, использующих JavaScript, похоже, используют только прототипы и наследование? Я не нашел в Интернете много информации о композиции в JavaScript, только в других языках.
Может ли кто-нибудь привести мне пример, используя приведенный выше код, чтобы продемонстрировать композицию и агрегацию?