OO – Exercise Solution (Bonus B)
JavaScript
/**
* OO – Exercise
*
* 1. Collection object
* a. It should have a "add" method, which accepts an Item instance
* b. It should have a "remove" method, which removes the provided Item
* c. It should have a "size" method, which returns the size of internal data
* d. It should have a "contains" method, which returns a boolean indicating
* whether the Item exists in internal data
* 2. Item object
* a. It should have a "get" method that accepts a property name
* b. It should have a "set" method that accepts a property name and value
* 3. General
* a. We should be able to create multiple instances of Item and store them
* in one or more instances of Collection
* b. Each instance should be distinct and independent from other instances
* of the same type
* 5. BONUS
* a. Create a property on Item called "stores", that is an instance of
* Collection. When an Item is added to or removed from a Collection,
* it will update this property with the Collection instance
* b. Make all data accessible only through exposed methods
* c. If you are feeling particularly ambitious, abstract any common logic
* to a parent object, and inherit from it
*/
function Collection(id) {
var data = [];
this.id = id;
this.add = function (itemToAdd) {
if (!_.contains(data, itemToAdd))
data.push(itemToAdd);
};
this.contains = function (item) {
return _.contains(data, item);
};
this.each = function (fn) {
data.forEach(fn);
};
this.filter = function (fn) {
return data.filter(fn);
};
this.remove = function (itemToRemove) {
if (this.contains(itemToRemove)) {
data = data.filter(function (item) {
return item !== itemToRemove;
});
}
};
this.size = function () {
return data.length;
};
}
function Item(id) {
var data = new Collection(id + 'Data');
...