2.9.4.1 Object.prototype.defineGetter(propertyName, functionObject)
When __defineGetter__ is called, the following steps are taken:
If the type of functionObject is not a function object, raise a TypeError exception
Let D be a newly created Property Descriptor with no fields
Set D.[[Enumerable]] to true
Set D.[[Configurable]] to true
Set D.[[Get]] to functionObject
If this value is undefined or null, let this be the global object
Call [[DefineOwnProperty]] on the this value with the arguments ToString(propertyName), propDesc, and false