quick architectural review, I don't actually know wth Life is, so I'm not going into the code. Everything said, besides not enough comments, it's better than most grads by a significant margin.
1. Radix is set to 0
"Life.config.grid.width = parseInt(Life.controls.widthField.value, 0);"
this is an example of radix being set to 0 when calling parseInt(). There is no benefit to this because it's equivalent to not setting a radix at all.
More usefully, it should be set to 10 because most people will assume something like width will be in base10.
ref:
"parseInt(string, radix);"
"If radix is undefined or 0 (or absent)"
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt2. Model is not explicitly attached to window object
"var Life = {...}" is the object/model for the application. It is declared at the root level of the script file, meaning this will attach the object implicitly to the window object.
A better solution would be to explicitly attach it to the window object - like this:
"window.Life = {...}"
Further improving the code, you should create an IIFE and import a 'namespace':
"
;(function (model) {
model = {...}; //'model' is equivalent to 'life'
})(window.Life = window.Life || {});
"
3. 'Life' is a data object, not a class
Capitalized names are reserved for classes according to every standard naming convention
4. Magic strings are frequently used
Examples include:
"hidden"
"gameContainer"
'static' strings, such as "hidden", should be made into a static string
'initialization' strings, such as 'gameContainer', should be injected into the model and saved into a string variable that is used instead of the literal
5. Driver is included with the core logic/model
The 'load' event callback serves as a driver in this codebase. It should be externalized into a separate JS file or made inline in the HTML file. This will force an API to be made with the result being enhanced testability (hopefully).
There are many more details about why your driver should be separate, but it's more detail than I care to dump out at this point.
6. setInterval is used
I'm not going to go into why this is bad. It really should only be used after careful planning and analysis. There ARE situations where it is the best or only option; but those are far rarer than instances where setInterval is used.
EDIT:
also no one tell me that JS doesn't have classes. if you know what you're talking about, then you know what I mean when i say classes.
also JS2015