2.9.4.1 Object.prototype.defineGetter(propertyName, functionObject)

When __defineGetter__ is called, the following steps are taken:

  1. If the type of functionObject is not a function object, raise a TypeError exception

  2. Let D be a newly created Property Descriptor with no fields

  3. Set D.[[Enumerable]] to true

  4. Set D.[[Configurable]] to true

  5. Set D.[[Get]] to functionObject

  6. If this value is undefined or null, let this be the global object

  7. Call [[DefineOwnProperty]] on the this value with the arguments ToString(propertyName), propDesc, and false