OO – Exercise

by Colin Cheevers

JavaScript

/**
 * OO – Exercise
 * 
 * 1. Collection object
 *   a. Internal data should not be accessible, except through exposed methods
 *   b. It should have a "add" method, which accepts an Item instance
 *   c. It should have a "remove" method, which removes the provided Item
 *   d. It should have a "size" method, which returns the size of internal data
 *   e. It should have a "contains" method, which returns a boolean indicating 
 *      whether the Item exists in internal data
 * 2. Item object
 *   a. Internal data should not be accessible, except through exposed methods
 *   b. It should have a "get" method that accepts a property name
 *   c. 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. If you are feeling particularly ambitious, abstract any common logic
 *      to a parent object, and inherit from it
 */
function Collection(id) {
    this.id = id;
    this.items = [];
}

Collection.prototype.add = function(Item){
	var totalNow = this.items.push(Item);
}

Collection.prototype.remove = function(Item){
	var pos = this.items.indexOf(Item);
    this.items.splice(pos, 1);
}

Collection.prototype.size = function(){
	return this.items.length;
}

Collection.prototype.contains = function(Item){
	return this.items.indexOf(Item) !== -1; 
}

Collection.prototype.filter = function (fn) {
    return this.items.filter(fn);
};

/*Solution URL: 
Basic - http://jsfiddle.net/jmcneese/h9wmLj0b/
Bonus - http://jsfiddle.net/jmcneese/x0kwrLj6/

function Item(id) {
    var _id = id;
    var...