Created
August 8, 2012 06:27
-
-
Save wilmoore/3292822 to your computer and use it in GitHub Desktop.
Experiment: Which API is more intention revealing?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| function Game(){ | |
| var total_score = 0; | |
| var scoring_map = {ghost: 10, pellet: 1, fruit: 5}; | |
| Object.defineProperties(this, { | |
| score: { get: function(){ return total_score; } } | |
| }); | |
| this.eat = function (edible){ | |
| total_score += scoring_map[edible] ? scoring_map[edible] : 0; | |
| } | |
| } | |
| var pacman = new Game(); | |
| pacman.eat('ghost'); | |
| pacman.eat('fruit'); | |
| pacman.eat('pellet'); | |
| pacman.eat('pellet'); | |
| pacman.eat('pellet'); | |
| pacman.eat('pellet'); | |
| pacman.eat('not-in-scoring-map'); | |
| console.log('Score:', pacman.score); // 19 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| function Game(){ | |
| // property + public accessor for (total score) | |
| var total_score = 0; | |
| this.score = function (){ return total_score; }; | |
| // other properties | |
| var scoring_map = {ghost: 10, fruit: 5, pellet: 1}; | |
| // public eat function (method) | |
| this.eat = function eat(edible){ | |
| total_score += scoring_map[edible] ? scoring_map[edible] : 0; | |
| }; | |
| } | |
| var pacman = new Game(); | |
| pacman.eat('ghost'); | |
| pacman.eat('fruit'); | |
| pacman.eat('pellet'); | |
| pacman.eat('pellet'); | |
| pacman.eat('pellet'); | |
| pacman.eat('pellet'); | |
| pacman.eat('not-in-scoring-map'); | |
| // This only works because the called function is a closure; so yes, the function totalScore() must be "applied" in order to retrieve the property value. | |
| console.log('Score:', pacman.score()); // 19 |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Huh....funny to come back to this much later. I no longer feel the ES5 method is better. It's way more verbose for little/no value. Calling a function to get/set is actually fine.