CoreJS: Factory and Array Practice
05 Aug 2015Review: this pitfalls
There's a problem in the code below:
function talk() {
console.log(this.noise);
}
var animals = [dog, cat, canary];
animals.allTalk = function() {
this.forEach(talk);
}
animals.allTalk(); // failure!
Identify the problem and fix it! Rewrite the allTalk method of array animals to
make each animal talk. You must use function talk without changing its definition, and forEach(something).
something should be a function which is not talk but instead somehow calls talk.
Embedding JS in HTML
Write an HTML file which embeds a javascript file in a <script> tag.
As you complete the exercises below, save them in that javascript file so that they can be run by loading your HTML file.
Finding one's marbles
Write a marble factory which can generate marbles with a custom size and color (having a property for each).
Give each marble instance a method
isBigger(other)which returns true if it is bigger than another marble,other. Attach that method to the factory initially, then link each marble instance to it, so that they all share the same function.
In the bag
Next, you'll implement an abstract data structure for a bag, which contains multiple items (e.g. marbles) jumbled together.
Write a factory function
makeBag(items)which makes bag instances. Each bag holds a collection of items, and the parameteritemsis an array listing the items the bag starts with (though more may be added). Each bag instance should have the following methods:put(item): places item into the bag in an unspecified position.draw(): removes a random item from the bag and returns it.divide(criterionFn): removes from the bag all items for which the callbackcriterionFn(item)returns truthy, and returns a new bag with just those items. The original bag will retain the items not matchingcriterionFn.serialize(compareFn): returns an array containing all items in the bag, sorted according tocompareFn.
Make a bag and fill it with 100 marbles of random size 1-4, with (nearly) equal numbers of red, blue, and green.
- Use your
dividemethod to extract the red marbles into another bag. serializethe red marbles into an array sorted by marble size, large to small.serializethe non-red marbles from the original bag, sorted by color (blues before greens).
- Use your
Make another bag which holds the names of everyone in the class. Serialize it in reverse alphabetical order.